feat(API): Add middlewares to falcon API

Currently falcon provides hooks as a way to add logic to all "routed" requests. With this approach it's not possible to execute code when a request is not routed (e.g., method not allowed, path not found ...)
I would like to include the concept of middlewares (same as django) in falcon as it may be useful for many projects. Typical middlewares:
- Generate unique transaction for all requests
- Log all requests and include time ellapsed
- Authentication (imo this should happend before any logic of routing, aka find responder).

A list of Middleware classes can be added to falcon WSGI in this way: 

api.add_middlewares([MiddClass1,MidClass2])

A middleware will be executed always with every request/response dispatched, no matters routing and errors.
A middleware can define process_request or process_response or both; internally the code will be executed when corresponds.
Arguments are the same as hooks and error_handlers. In unit tests, some examples can be seen.

IMO:
the old falcon "after" behaviour was:
- Catching all exceptions (even those launched with after...)
- apply error_handling
- execute after again- > and maybe one callable can be executed two times; if an after callable raise a HTTPError this is caucht and later called again...

I propose you include  process_exception in middleware to handle this.
process_response mw are applied after responder
process_exception are applied whenever happen an exception (even in process response...)

this is same idea of django middleware and I think is quite powerful.
Existing register_error_handler is perfectly valid as it handles Exceptions during request mw and responder. 
process_exception applies to all as last instance (no response_mw is executed after) only mws who define process_exception.

What do you think of that ?