Added observer pattern + NonCopyable non constructible + Pimpl use unique_ptr instead of shared_ptr + Signal fixed + States are now shared_ptr + Singleton returns a shared_ptr