The beginnings of a “message exchange” style API

Add basic `exchange` facility. Add simple broadcast exchange type.
Make event handler registration synchronous

When spawning new event handlers, wait until they’ve received a valid
InputChannel before returning. Fixes a race in TestExchange.

Tidy comments and remove some compiler warnings.
Refactor (document and simplify)

Document the EventManager and provide a simpler interface for adding
event handlers, allowing for raw messages as well as specific event
types.
Add Routable instance for Mailbox
Add a simple exchange based routing mechanism

Influenced by Akka’s “routers”, but with an Exchange-flavoured design.
Add a new spawn primitive that synchronises on a ‘before’ action
Strip debugging expressions
Use spawnSignalled in our Router tests to avoid a silly race
Test selective (key based) routing
Header content based routing
More API glue for custom exchanges and remove a leak in Router
Introduce a ‘Linkable’ typeclass
Refactor (tidy up and document)

- Rename some ExchangeType API fields/functions
- All documentation moved to top level
- Remove custom monitors/links and introduce Linkable instances
- Hide Exchange implementation modules
- Juggle imports / definitions
- Remove some compiler warnings
Refactor Documentation/Links
Merge branch 'exch-event'

Provide a message exchange API and a generic pub/sub event handling mechanism
built over it, a message routing exchange (inspired by Akka's router API).