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

This is a possibly controversial change that solves #4796 and an annoying difference around components vs. everything else.

#### New Shiny

* New `Model.initialize` event that is fired after the initialize() method, just like in controllers.
* Component::initialize() works like the other initialize methods. This also solves a long standing issue around sub components not getting their initialize method invoked.
* Component::beforeFilter() added.
* Controllers *always* have a request/response now.


### Breaking changes

* Component::intialize() is no longer an event listener.