[SPARK-4912][SQL] Persistent tables for the Spark SQL data sources

This is the first of a few improvements I'd like to make to the data sources API.  I'll note that this does not correctly handle multiple databases.  However, since much of the code does not, and since I don't think improving this will change the public API, I think its reasonable to handle that in a separate PR.
Also I think `SerDeInfo` might not be a proper place to put external data source table options. Semantically, these options are more like general table properties, thus using `table.putProperty` might be better.

@yhuai Are there notable differences between SerDe properties and general table properties in Hive? Or to be more specifically, differences between properties saved in `metastore.Table.getTTable.getParameters` and those in `metastore.Table.getTTable.getSd.getSerdeInfo.getParameters.