add support for non-returning middleware and running of empty middlewares
drop co-dependency. Made to be used inside co