Split SbtChannel out of SbtClient 

This is mostly a code cleanup to separate concerns; it also allows us to make more assumptions in SbtClient because it becomes possible to use the raw channel if someone has custom needs.

it doesn't currently do anything, no. I guess this code is written as if it did. We could remove removeEventListener and just do listeners = Set.empty here.