noncopyable_function: support function objects whose move constructors throw
noncopyable_function: support function objects whose move constructors throw

Some library functions (std::deque) have non-noexcept move constructors,
so they cannot be captured by noncopyable_function.

Fix by allowing such functions and using the indirect path unconditionally
for them. Since the functions will be placed on the heap, their move
constructor is only invoked during construction of the function object.

This patch has a downside in that a missed `mutable` on a lambda can
cause a move to be silently turned into a copy. However: this is true
in many other cases, and it can be detected by profiling, whereas dealing
with a noexecpt-unfriendly type can be much harder. It's better to be
forgiving here, to go along with the spirit of the language.
Message-Id: <2cd933c16032ade23c1563d2a7870b5607b22def@scylladb.com>

syuu1228/seastar,syuu1228/seastar,avikivity/seastar,scylladb/seastar,scylladb/seastar,dreamsxin/seastar,cloudius-systems/seastar,avikivity/seastar,cloudius-systems/seastar,scylladb/seastar,syuu1228/seastar,avikivity/seastar,dreamsxin/seastar,dreamsxin/seastar,cloudius-systems/seastar