[major][api] Phase out transformer internals to middleware layers

The main reason for this is because the code will become to complicated when we have
to deal with middleware layers AND the old code structure at the same time. While
these changes were only planned for when 2.1 was released so we could see how the
middleware system was working it was a change that had to be done now.

This change is currently breaking our tests as middleware layers are not yet called
or initialised for each request.