Misc cleanup of session state.

While debugging IMPALA-1178, I came across a few cleanups:

1) ExecuteInternal() was initializing registered_exec_state after the first
   return statement, and so Execute() could sometimes leave the query exec
   state registered in case of failure.

2) Put the content of CancelSessionQueries() / CancelSessionQueriesAsync()
   directly inside their respective single callers.  This is clearer because:
  * It avoids an unnecessary mutex drop and reaquire, which makes the code
    easier to reason about (fewer possible interleavings to consider), and is
    a bit more efficient.
  * The function names were misleading: these routines unregister the queries
    rather than just canceling them.

3) Tighten up an invariant around expiration, which means we have fewer cases to
   consider when thinking about possible races.

Change-Id: I1e77f1111d1599313f6ac9a48ce9d4959592a0de
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/4198
Reviewed-by: Daniel Hecht <dhecht@cloudera.com>
Tested-by: jenkins
(cherry picked from commit 265eb71a4b5244710d38f9d393d9c4cb5600f197)
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/4204