Make abstract Middleware class public

It doesn't make sense for subclasses to have to implement all methods.

@DeepDiver1975 @Raydiation @bartv2 @karlitschek