Make plugins a first class citizen with API contracts.

This is a major API change that is not backwards compatible. It also drops support for PHP 5.3. After merge the major version number will need to be incremented.

The idea with this change is to make the `PluginManager` an instantiated entity. As part of this change, plugin interfaces were added to tell the `PluginManager` how to bind the events (whether it's the `OpenEndable` which is how it used to be bound, or the new `Registerable` which uses predefined mechanism to bind). It also makes triggering events a little easier and more contained by being triggered through the instantiated `PluginManager` (if using plugins).

This also includes @jrbasso's performance update that uses PHP 5.4's new callable style.