First pass at binding components to the eventmanager

Much like helpers, components should bind their events directly to the
event manager. This will make the events more efficient and less special
from user-land events. It also focuses the ComponentCollection on being
a factory which makes it simpler as well.
Start updating components, controllers and tests.

Start updating the various classes, and tests for changes in component
events. There is still more to be done, as a number of tests are still
failing.
Always pass the subject as the second argument in event handlers.

It might make sense to remove this feature later, but for now it will
help with migrating the events over.
Revert "Always pass the subject as the second argument in event handlers."

This reverts commit 9125c1a77ade38ea44229eff36ac877895834dfa.
Pass the controller as an argument to component events.

In the long term I think this can be removed as Components can easily
access the controller using the event object, or via the
ComponentCollection.
Migrate the first set of components to the new events.

Upgrade the first chunk of components and their tests to use the new
callback style. I'm not sure if AuthComponent works as the tests are all
skipped right now.
Update SecurityComponent and its test cases.
Update Component test case.
Fix a few more failing tests.
Add missed events to ExceptionRenderer.
Remove the default Component callbacks.

This will help make the callbacks more efficient, and reduce the number
of no-op callbacks  It also means that there is no need to call parent
anymore when simply extending Component.
Remove initialize() call

SecurityComponent does not implement this method.
Update file comment.
Update Controller & Component tests to remove Controller parameter.

The Controller parameter is not used in all components, it is also
redundant given that $event->subject() exists. Keeping the callback
signatures simple is more important than adding redundant parameters at
this point in time.

Re-enable most of the controller tests. Most do not rely on Models and
can be re-enabled. A few tests are failing as beforeRedirect() is not
complete.
Remove redundant event parameter.

This parameter is now redundant, remove it.
Drastially change how beforeRedirect callbacks work.

Instead of relying on removed event system features, the beforeRedirect
callback now works differently. Each callback will receive the original
URL that the redirect was for and the response object. Any listener can
directly set the location header, statusCode or any other headers they
desire. The exit parameter cannot be altered and will most likely be
removed in the future as exiting from the controller makes a variety of
testing situations harder. This change also simplifies the testing
& behavior of the beforeRedirect callback.

If a beforeRedirect callback is stopped no redirection occurs as in the
past.
Use Response::location() & fix failing test.

Use the new methods to detect/set location headers. Also fix a failing
test, by re-using existing fixture classes.
Fix errors, function signatures and fixtures.

Update class fixtures remove incorrect code in ExceptionRenderer. Also
update and expand documentation around controller callbacks.
Fix coding standards.

`use` should be in alphabetical order.
Ensure status code is set.

Set the status code into the response before firing the beforeRedirect
event. This allows for fewer arguments in each event listener but still
allows listeners to read and modify the status code.

Remove redirect with string status codes. The documentation and simplest
use is with integers. String names for status code are more verbose and
require additional logic to handle. If necessary constants can be added
for the most common status codes.