[SPARK-4205][SQL] Timestamp and Date classes which work in the catalyst DSL.

These Timestamp and Date classes support the usual comparison operators, so they can be used in catalyst Expressions.  They come with implicit conversions to and from the underlying Java classes.  They also have a convenient initializer which accepts a String.

Additional implicit conversions fix an issue with the DSL where expressions like 0 < 'x are not recognized.

Sorry for not being clear enough, all getters/setters for `Date` and `Timestamp` in all `Row` classes should be removed, including:

- [MutableRow](https://github.com/apache/spark/pull/3066/files#diff-d065227bfe580403f937c59a1c9e3fadR104)
- [EmptyRow](https://github.com/apache/spark/pull/3066/files#diff-d065227bfe580403f937c59a1c9e3fadR126)
- [GenericRow](https://github.com/apache/spark/pull/3066/files#diff-d065227bfe580403f937c59a1c9e3fadR193)
- [GenericMutableRow](https://github.com/apache/spark/pull/3066/files#diff-d065227bfe580403f937c59a1c9e3fadR246)
- [MutableDate and MutableTimestamp](https://github.com/apache/spark/pull/3066/files#diff-ea0766c16ccb1684d2bf67df274d0d5bR173) & [SpecificMutableRow](https://github.com/apache/spark/pull/3066/files#diff-ea0766c16ccb1684d2bf67df274d0d5bR340) (`SpecificMutableRow` was designed for avoiding boxing/unboxing costs when getting/setting primitive types like `Int` and `Double`. Adding specialized code for `Date` and `Timestamp` doesn't make sense here.)