Plugable actor creation pipeline + IDisposable action handling

cc #533

I've created `ActorProducerPipeline`, which accessible from `ExtendedActorSystem` (to be able to configure by plugins) and allows to inject custom hooks satisfying following interface:
```csharp
interface IActorProducerPlugin {
    bool CanBeAppliedTo(ActorBase actor);
    void AfterActorCreated(ActorBase actor, IActorContext context);
    void BeforeActorTerminated(ActorBase actor, IActorContext context);
}
```

- **CanBeAppliedTo** determines if plugin can be applied to specific actor instance.
- **AfterActorCreated** is applied to actor after it has been instantiated by an `ActorCell` and before `InitializableActor.Init` method will (optionally) be invoked.
- **BeforeActorTerminated** is applied before actor terminates and before `IDisposable.Dispose` method will be invoked (for disposable actors) - **auto handling disposable actors is second feature of this commit**.

For common use it's better to create custom classes inheriting from `ActorProducerPluginBase` and `ActorProducerPluginBase<TActor>` classes.

Pipeline itself provides following interface:

```csharp
class ActorProducerPipeline : IEnumerable<IActorProducerPlugin> {
    int Count { get; } // current plugins count - 1 by default (ActorStashPlugin)
    bool Register(IActorProducerPlugin plugin)
    bool Unregister(IActorProducerPlugin plugin)
    bool IsRegistered(IActorProducerPlugin plugin)
    bool Insert(int index, IActorProducerPlugin plugin)
}
```

- **Register** - registers a plugin if no other plugin of the same type has been registered already (plugins with generic types are counted separately). Returns true if plugin has been registered.
- **Insert** - same as register, but plugin will be placed in specific place inside the pipeline - useful if any plugins precedence is required.
- **Unregister** - unregisters specified plugin if it has been found. Returns true if plugin was found and unregistered.
- **IsRegistered** - checks if plugin has been already registered.

By default pipeline is filled with one already used plugin - `ActorStashPlugin`, which replaces stash initialization/unstashing mechanism used up to this moment.
Yes, I've started with *Destroy* suffix, but then realized that actually naming convention calls it *Terminated*, so I've adjusted methods names to it. But it seems that I've missed one place ;)