Add experimental Session::MakeCallable() API and implement it for DirectSession.
The intent of this new API matches the Python `tf.Session.make_callable()`
method: it splits the two roles of the `Session::Run()` method into separate
methods:
1. `Session::MakeCallable()` takes information about a subgraph (such as the
names of nodes to feed and fetch), and prunes and optimizes that graph,
returning a simple handle.
2. `Session::RunCallable()` takes that handle, plus any values to be fed,
and executes the graph, returning whatever outputs are produced.
This split moves string processing off the critical path of running a
step. We also add a new method `Session::ReleaseCallable()` that makes
it possible to free the resources associated with a cached subgraph,
and could be useful for seldom-executed graphs such as initializers.
PiperOrigin-RevId:
188566635