Add Model.initialize event.

This event follows the same pattern as Controller.initialize where it is
fired *after* the initialize() method and after other subscribers have
been attached. The initialize() method is *not* an event subscriber as
it is intended to be a post-constructor hook method like
Controller::initialize().

This will likely result in Component::initialize() being modified to be
conformant. There have been a number of reported issues in the past
around Component::initialize() not being called. It would be nice to put
those issues to rest and have consistency across the framework.
Make Component::initialize() work like other initialize() methods.

Make Component::initialize() consistent with Controller and Table, this
makes the framework easier to understand as methods with the same name
work consistently everywhere. While I'm not totally sure about what to
do with the Controller.initialize event hook in components, I feel this
change is a good one even though it breaks existing API compatibility.

The primary use of this event hook was RequestHandler which has been
updated to not rely on the event hook. I've also ensure that
Controllers always have a request and response object as that was
causing me some grief and logically makes sense.
Add Component::beforeFilter

This method is an event listener that listens to the
Controller.initialize event. I decided to copy the controller method
name so there was some semblance of consistency. This may be a bad idea
though.
Fix PHPCS error and add doc block.
Merge pull request #4823 from cakephp/issue-4796

Add Model.initialize event and rework how Component::initialize() works