rework the middleware stack, fix all the things
update readme, update middleware args
added _plugin() method on middleware stack, updated docs, add stubs for tests that need to be written