[SPARK-4037][SQL] Removes the SessionState instance created in HiveThriftServer2

`HiveThriftServer2` creates a global singleton `SessionState` instance and overrides `HiveContext` to inject the `SessionState` object. This messes up `SessionState` initialization and causes problems.

This PR replaces the global `SessionState` with `HiveContext.sessionState` to avoid the initialization conflict. Also `HiveContext` reuses existing started `SessionState` if any (this is required by `SparkSQLCLIDriver`, which uses specialized `CliSessionState`).
I didn't call `SessionState.start(...)` here because before Hive 0.13.1 support is merged in, it's always called when necessary in [`HiveContext.runHive`](https://github.com/apache/spark/blob/2ef2f5a7cabcce0f46385d0e7e51e1cc7dd471a0/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveContext.scala#L291). Just noticed that this call was removed in the most recent master branch. I consider this change dangerous because the current `SessionState` may be switched at some other place and cause subtle errors.

However, add another `SessionState.start(...)` call here is harmless and do helps to track when and whether the session state is properly initialized.