execution_stage: make make_execution_stage return a named type
execution_stage: make make_execution_stage return a named type

The fact that make_execution_stage() returns an unnamed type (auto)
makes it hard to store an execution stage in an object, which in turn
makes it hard to use scheduling_groups with an execution_stage, as
scheduling_groups need to be initialized outside a static context.

Fix by using noncopyable_function to type-erase the stage's function,
so the concrete_execution_stage type now depends only on the return
type and argument types, not the function object type.

Impact on performance is expected to be nil, for exactly the reason
execution_stages work so well: the first iteration will seed the
processor's branch target buffer, and subsequent iterations will use
the cached branch target.
Message-Id: <16fea88b5c0878c1d3d39c5661cac7fa54f1f1f3@scylladb.com>

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