Session service factories

This pull request provides `ServiceManager` factories for the `Zend\Session` component. It includes the following:

- A new `Zend\Session\Storage\Factory` class for creating instances of storage adapters. This is completely de-coupled from the `ServiceManager`.
- `Zend\Session\Service` namespace with the following:
  - `SessionConfigFactory`, for instantiating a session configuration object. This utilizes the `session_config` key of the `Config` service. If a `config_class` subkey is available, the class name it defines will be used as the configuration class. The entire `session_config` array is passed to the configuration class's `setOptions()` method. This factory should be assigned to the service name `Zend\Session\Config\ConfigInterface`.
  - `StorageFactory`, for instantiating a storage instance. It utilizes the `session_storage` key of the `Config` service, and expects it to be in the format:

    ```php
    array(
        'type' => 'ShortName Or FQCN of Storage Class',
        'options' => array(/* any valid options for the given storage class */),
    )
    ```

    The type and options are passed to `Zend\Session\Storage\Factory` to create and return an instance. This factory should be assigned to the service name `Zend\Session\Storage\StorageInterface`.
  - `SessionManagerFactory`, for instantiating a `Zend\Session\SessionManager` instance. If any of the services `Zend\Session\Config\ConfigInterface`, `Zend\Session\Storage\StorageInterface`, or `Zend\Session\SaveHandler\SaveHandlerInterface` are present, they will be used to instantiate the `SessionManager` instance. This service should be assigned to the service name `Zend\Session\ManagerInterface`.
  - `ContainerAbstractFactory`, for instantiating `Zend\Session\Container` instances. It uses the `session_containers` key of the `Config` service, and expects the value of that key to be an array of container names. If a `Zend\Session\ManagerInterface` service is present, it will be used to instantiate `Container` instances. Container service names MUST be prefixed with `SessionContainer\` for the factory to match. This means that the following definition:

    ```php
    'session_containers' => array(
      'foo',
      'Captcha',
    )
    ```

    defines the services `SessionContainer\foo` and `SessionContainer\Captcha`.

All factories are completely opt-in, and `Zend\ServiceManager` has been added as an **optional** dependency.

As a full example of configuration:

```php
return array(
    'service_manager' => array(
        'factories' => array(
            'Zend\Session\Config\ConfigInterface' => 'Zend\Session\Service\SessionConfigFactory',
            'Zend\Session\Storage\StorageInterface' => 'Zend\Session\Service\SessionStorageFactory',
            'Zend\Session\ManagerInterface' => 'Zend\Session\Service\SessionManagerFactory',
        ),
        'abstract_factories' => array(
            'Zend\Session\Service\ContainerAbstractFactory',
        ),
    ),
    'session_config' => array(
        'remember_me_seconds' => 1800,
        'name' => 'my_app',
    ),
    'session_storage' => array(
        'type' => 'SessionArrayStorage',
        'options' => array(), // Likely don't want to seed it
    ),
    'session_containers' => array(
        'Captcha',
        'User',
        'FlashMessages',
    ),
);
```

You would then retrieve services within factories as follows:

```
$user = $services->get('SessionContainer\User');
$messages = $services->get('SessionContainer\FlashMessages');

$manager = $services->get('Zend\Session\ManagerInterface');
```