Got rid of orig_type restrictions

I'm not sure why I originally thought requiring that the original type
stay the same was a good idea.  I see nothing wrong with:

    SharedMember<Base> whatever = ...; // some SharedMember<Derived>
    whatever = ...; // some SharedMember<Other_Derived>

which is simply treating `whatever` as a container.

This commit removes the orig_type junk and the custom copy assignment
operator entirely: the implicit one is just fine, and enforces (via the
copy constructor) that things like:

    SharedMember<B> b = ...;
    SharedMember<A> a = b;

throw a bad_cast when B is not castable to A.

This makes SharedMember<T> work much more like a shared_ptr<T>, with
just the automatic up- and down-casting and the few utility methods.