Split pointer_cast.hpp out of pointer_traits.hpp, and added default implementations of generic_ptr::static/const/dynamic_pointer_cast which perform ADL internally.