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.

This is a bit odd.  Does removeEventListener do anything special I don't see?  Why not just new a new collection rather than leaving this one around?