Multi-server support.

Api takes construction params that describe the execution context.  When
executing via api.runQuery(), the context params are passed to execute().
runQuery() returns a promise.