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 seems to me that you might want the ability to raise an instance of HTTPError in a middleware method and have it converted to an HTTP response as is done for resource classes (consider the case of implementing auth in middleware, for example). Also, you may want custom error handlers to be invoked for other kinds of exceptions.

There are two cases:

1, If a `process_request` call raises an error, that result in skipping everything else except for the HTTPError and custom error handlers.
2. If a "responder" method in a resource class raises an error, that should be handled and then control should still always pass to the "after" middleware. But if that middleware, in turn, raises an instance of HTTPError or an error with a registered handler, that should be handled the same as if it had been raised from within a resource class.

What do you think? Does that make sense?