Add middleware functionality for incoming call messages

Summary
-------
This runs middleware on incoming call messages.

This allows custom middlewares to be configured.

Middlewares must return either a
`VegaServer::IncomingMessages::CallResponse::Accept` or
`VegaServer::IncomingMessages::CallResponse::Reject` object.

The objects returned by middlewares are effectively values of the Either
monad, where `Accept client_caller` represents `Right b` and `Reject
error` represents `Left a`. This calls consecutive middlewares as
functions to `#bind`, where the middleware chain is stopped whenever a
`Reject` object is returned by some middleware.

This adds a default middleware that checks whether a room id is in the
call payload.
Use existing ivar for payload in incoming messages constructor

Make room for middleware specs

Fail logically with middleware spec

monads, whatever

I don't know if this is even worth it, but it seems good

Remove unnecessary assignments

Call message client caller, move some things around

Pass client caller into .run_middleware

cover payload

Clean up Reject

Add no room id middleware

Deepen namespacing

Change DEFAULT_MIDDLEWARES -> DEFAULT

Run middlewares from own namespace

Extract local variables to private class methods

run middlewares on the collection instance

Add ClientCaller object

Don't initialize attrs on client caller

Include Error message

Change name of default middleware