Ability to attach/detach shared listeners from `AbstractListenerAggregate`

Adding the ability to attach and detach shared event listeners by their id. Simply append the listener returned by the shared event manager to the `$sharedListeners` property:

~~~php
<?php

use Zend\EventManager\AbstractListenerAggregate;
use Zend\EventManager\EventManagerInterface as Events;

class FooListener extends AbstractListenerAggregate
{
    public function attach(Events $events)
    {
        $this->listeners[] = $events->attach('foo', array($this, 'fooCallback'));

        $sharedEvents = $events->getSharedManager();
        $id = 'Zend\Stdlib\DispatchableInterface';
        $this->sharedListeners[$id][] = $sharedEvents->attach($id, 'foo.bar', array($this, 'fooBarCallback'));
    }
}
~~~

I've also cleaned up the `ViewManager` and moved the event listening logic to each individual listener's `attach()` method. This allows us to detach `RouteNotFoundStrategy` for example [without having to resort to hacks](http://stackoverflow.com/q/21490045/2257808).