query_service: split query_engine into request_executor

Moved all the plan execution code into a separate type.
The number of parameters being passed around has been slowly increasing.
We now need to pass a deadline, and eventually a context around.
So, it's better to combine those into a separate type.
The code is currently duplicated in query_engine, but it will be
removed in a subsequent CL.