[api] Adding new middleware methods
[major] Use the same prototype pattern
[major] Use fuse instead of predefine directly
[minor] Added `Transfomer.forEach` for iterating over the middleware.
[fix] Use `splice` to remove a middleware layer and fix the `indexOfLayer` method
[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.
[fix] Remove unused `unknown` event.
[fix] Actually call the middleware layers.
[fix] Tests are passing again. We're not using an async pattern.
[minor] Allow middleware only to be ran for http or upgrade's
[minor] Don't run these middleware layers for `upgrade` events
[fix] Reference the function where there properties are added not the layer object it self.
Merge branch 'master' of github.com:primus/primus into middleware

Conflicts:
	transformer.js
[codestyle] Added missing `@returns` doc comments
[major] Introduce `Spark.request`

The `Spark.request` property gives you access to the HTTP request that was used to
initiate the connection or the first HTTP request that was used to send data.
[doc] Document `spark.request`
[test] Added missing test for spark.request
[fix] Connect middleware compatiblity by introducing pre-set properties on req.
[fix] Correctly call the next function
[codestyle] Remove unneeded else branches
Merge pull request #188 from lpinca/refactoring

Remove unneeded else branches
[test] Adding tests for the new middleware api's