beam/date: Msg.Set() and Msg.Add() accept a variable number of values
beam/date: Msg.GetAll() returns all values for a given key
beam: break down the API into senders/receivers to plumb together:

* Session: send/receive on an underlying data transport
* Stream: send/receive by multiplexing inside a Session
* Router: send to the backend matching a route
* JobHandler: send to rpc-style adapter

Also a proof-of-concept of a "register" job.