Introduce a new middleware API

This changeset deeply changes the middleware API. The spirit stays the
same, but everything has been (at least) renamed, pre-existing
middlewares will unconditionally break. The new API:

- is much more clear;
- offers better instrumentation opportunities (e.g: call tracing or the
  Raven/Sentry middleware).

The following hooks changed:

- call_procedure has been replaced by server_before_exec and
  server_after_exec, there is two reasons for this:
  * while kinda elegant it wouldn't allow any context (like the request
    or reply event) to be passed to the middleware because it had to
    take the exact same argument as the real (i.e: the served) method to
    be called;
  * I think two hooks are more clear here.
- inspect_error has been renamed to server_inspect_exception for clarity;
- raise_error has been replaced by client_handle_remote_error, not only
  the name is more clear, but it also return the new exception instead
  of raising it, which leave the liberty to the middleware to just
  inspect the exception on the client side (by returning nothing);

The hooks also receive much more context than before (mainly via request
and reply events objects).

Two new client hooks are introduced:

- client_before_request: called before the request is sent to the
  server;
- client_after_request: called when an answer or a timeout has been
  received from the server.

Unit tests have been added and updated accordingly. Moreover, PUB/SUB
tests showed errors which seem to be an independent problem from this
changeset and originate from pyzmq/libzmq directly; thus they have been
disabled (you can use nose --no-skip to run them).
Remove the client_return_answer hook from the list

This hook was already removed (it was redundant with
client_after_request).
Fix the PUB/SUB tests

FX kindly reminded that the Subscriber must be reading on the ZMQ socket
*before* the send from the publisher to get the message. In other words,
the test failures were a perfectly expected behavior from ZMQ.

Thus, this changeset add some retry logic to give the time to the
subscriber.run coroutine to trigger a read.
Pass the request event to the client_after_request hook

This is useful to get some context on the current task when the reply
event is None (either because we are timing out or because we are
talking to a PUSH/PULL or PUB/SUB).

It also replaces the useless method argument from the patterns.