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.

OK, I think it is hard to predict what sort of behavior most people will expect/want here, so we can wait and see what kind of community feedback we get.

That being said, I was thinking about the current code some more and I wonder if it would make sense to keep L150 in place, but also call `self._call_resp_mw(stack_mw, req, resp)` after L410 (in the `except` block). That way, if an error handler is called and it, in turn, raises HTTPError (e.g., translating a database connection error into an HTTP error), the response middleware methods are still called.