crimson: avoid seastar::do_with() due to performance reasons.
`seastar::do_with(T&& rvalue, F&& f) takes object for lifetime
extension by rvalue reference. This imposes materialization of
a temporary to move from even when `do_with()` is being called
like:
`do_with(OpsExecuter{...}, [] { /* ... */)`.
The reason behind that is following language rule:
"Temporary objects are created when a prvalue is materialized
so that it can be used as a glvalue, which occurs (since C++17)
in the following situations:
* binding a reference to a prvalue"
(from: "Temporary object lifetime", cppreference.com)
As OpsExecuter is pretty heavy-weight, it is reasonable to avoid
`do_with()` and perform the lifetime extension with smart pointer.
Additional benefit is squeezing plain-to-errorated conversion in
`seastar::internal::do_with_state::get_future()`.