Hmm, take a look at my changes.  I actually put the registration on a client itself, although the connector may be better...

In any case, sbt has hardcoded the "core" messages, but there's a hook in the BuildValue format to look in the DynamicSerialization reigstry so it can handle arbitrary messages.

And for messages from client->sbt that's usually initiated by the task (like `readLine`, `confirm`, etc.), but we do have those in place and they're 100% known now, not that this has to be the case in the future.

In any case, take a second gander.  I at least altered the design so we can remove the global registry in the future via only touching internal code.  not 100% on it, but it works and it's not too inelegant.