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.

the serial handling (request/reply matching) is up in SbtClient so the envelope has to go up there.