feat(shared_ptr): creation function new_shared

Unlike make_shared, new_shared takes a creation function (return T*)
as the 1st function argument instead of the target type as the 1st
template argument.