Made SharedMember<T> Swappable

Previously SharedMember<T>s were only swappable when the original types
were the same (otherwise the base std::swap ended up using copy
assignment, which fails).  This makes them properly Swappable by
swapping both the pointer *and* the the orig_type.

This is particularly useful for efficiently doing things with
containers that need to efficiently swap elements around but that
contain more than a single type.