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.

It's ok @kgriffs, if I have understood wel:
- Leave after and before global hooks as now
- Implement middleware indepently:
   process_request
   responder
   process_response
for the normal cycle
process_exception: when an exception happens they are apply without any extra catching

error_handler applies to process_request, responder and process_response

I would like to have process_exception as some people may use to put over there logic to be executed always (taking into account that any exception is catched....