ImplContainer::nullify() new function to nullify the impl_ptr

Nullifying means setting to nullptr ;-)
Use ImplContainer::nullify() instead of setting imp_ptr directly
ImplContainer::impl() return reference and add const version

Return a reference instead of a copy
Access ImplContainer's impl_ptr only via impl() everywhere
ImplContainer: change impl_ptr visibility to private

Access is done via impl() for the shared pointer itself or via
backend() if the managed pointer is wanted. Latter access is
guarded, i.e. throws an exception if impl_ptr is empty.
ImplContainer: Add brief docs for backend() & impl()
Merge pull request #132 from gicmo/impl_ptr_private

Make ImplContainer's impl_ptr private

:+1: