Add Ref/Deref functions to SharedPointer.
Move RefCounter out of SharedPointer.
Fix return in operator=.
Refactor SharedPointer: introduce SmartPointerBase.
Add support for future WeakPointer implementation.

Remove consts; distinguish weak_count_ and strong_count_.