make sure timer does not run with pointer to delete objects

move deletion of InternalSubscription to asio service to make sure timer. does not run with pointer to delete objects
I cannot now commectn inplace code wasn't changed, I write here.
We need add enable_shared_from_this to InternalSubscription and for example change constructor:
```
     InternalSubscription::InternalSubscription(SubscriptionServiceInternal& service, const SubscriptionData& data, const NodeID& SessionAuthenticationToken, std::function<void (PublishResult)> callback, bool debug)
       : Service(service)
       , AddressSpace(Service.GetAddressSpace())
       , Data(data)
       , CurrentSession(SessionAuthenticationToken)
       , Callback(callback)
       , io(service.GetIOService())
       , Timer(io, boost::posix_time::milliseconds(data.RevisedPublishingInterval))
       , LifeTimeCount(data.RevisedLifetimeCount)
       , Debug(debug)
     {
        std::shared_ptr<InternalSubscription> self = shared_from_this();
       // self will save object from destrution before PublishResults frinished.
       Timer.async_wait([self, this](const boost::system::error_code& error){ this->PublishResults(error); });
     }
```
Something like (saving shared pointer in lambda) this should be done in every async call. Then object will live until finishing last async call. Therefore here we can just erase InternalSubscription from SubscriptionServiceInternal map without additional hacks with async calls.