Split some stuff out of shared.hpp into pointer_traits.hpp,
detail/operator_bool.hpp, and detail/util.hpp so it can be used
by other generic pointer classes.
Made generic_ptr::shared constructor which uses default deleter
apply get_plain_old_pointer()
to incoming generic pointer before it is bound to checked_delete.
Added initial pass at generic_ptr::monitor (no
explicit lock types yet, such as monitor_unique_lock).
Added generic_ptr::intrusive, a generic pointer version of
intrusive_ptr.