Constructor
Ensures that T is always a Request or a Response
T
Middleware() : assert(T == Request || T == Response);