Use std.shared_ptr for observation implementation
detail.StrategyPointer<T> can be replaced with std.shared_ptr<T>.
And also detail.Listeners<T> can use std.shared_ptr<T> in implementation.
detail.StrategyPointer<T> can be replaced with std.shared_ptr<T>.
And also detail.Listeners<T> can use std.shared_ptr<T> in implementation.