Each middleware can be associated with a particular path; if that
path is matched when that middleware is invoked, it will be processed;
otherwise it is skipped.
No path means it should be executed every request cycle.
A handler CAN implement MiddlewareInterface, but MUST be callable.
Handlers with arity >= 4 or those implementing ErrorMiddlewareInterface
are considered error handlers, and will be executed when a handler calls
$next with an error or raises an exception.