BKE_libblock_copy_ex()
Now that we have the private ID data flag, we can be more simple *and* generic here.