Make ChannelSet immutable

Only last commit is new.  Other commits are from #1379 

Rewrite ChannelSet using GroupByHash as a template

Before:
```
sql_semijoin_in :: 1905.036 cpu ms :: in  7.5M,  64.4MB,   3.94M/s,  33.8MB/s :: out    3M,  25.8MB,   1.58M/s,  13.5MB/s
```
After:
```
sql_semijoin_in :: 1222.121 cpu ms :: in  7.5M,  64.4MB,   6.14M/s,  52.7MB/s :: out    3M,  25.8MB,   2.46M/s,  21.1MB/s
```
Maybe name this something else, since you removed the "current row" concept? Like positionEqualsPosition seems better to me