Public middleware

Make abstract class Middleware public, as it doesn't make sense for subclasses to have to implement
all methods, when often only one is needed.