[SPARK-2594][SQL] Add CACHE TABLE <name> AS SELECT ... (Updated as per review comments)

Updated as per the review comments of Admin.
Previous pull request is https://github.com/apache/spark/pull/2381
I think `opt(AS ~ select)` would be better here? Otherwise illegal statements like `CACHE TABLE AS` and `CACHE TABLE SELECT * FROM t` would both be allowed.