Quick DISTINCT scans

Derby can use a hash table instead of a sorter to eliminate duplicates when performing a DISTINCT in the following cases.

This technique allows for minimal locking when performing the scan at the READ COMMITTED isolation level.

Note: This technique appears in RunTimeStatistics as a DistinctScanResultSet.