Added middleware component as per discussions

Changes from the last PR:

* Depth is tracked as middlewares wind and unwind, so any middlewares that end() a response prevent middlewares further down the chain getting either their 'before' or 'after' called.
* Middleware handlers are now handled as `IMiddleware*`
* Restructured `middleware.h` to be more in line with the structure of other crow source files
* Fixed a bug in http_response.h in which the `completed_ = true` was being reverted by a call to `res.clear()` inside the completed response handler.