port enable_shared_from_this to std
port from Boost.Chrono to <chrono>

<chrono> is definetly poor, but lets try
use <atomic>
add missing header
use <type_traits> & static_assert
add support for function returning something
move instead of copying
code style fix
use std::forward
return using std::move, how cool is that?