[SPARK-4205][SQL] Timestamp and Date with comparisons / DSL literals

This is the same as pull request #3066, which I closed due to corruption of the repository after I tried to rebase so as to include modifications to a test file added after the original pull request was issued.

There are two parts:
(1) new RichDate and RichTimestamp classes provide comparison operators, which allows them to be used in DSL expressions, and initializers which accept string representations of dates or times;
(2) new implicit conversions are added which allow recognition of DSL expressions which have a literal on the left, e.g. 0 < 'x . 
Yea, just to be clear, you may notice that all those `MutableXxx` classes are for primitive types. They are used to avoid boxing costs. On the other hand, `Date` and `Timestamp` objects are always boxed anyway. That's why they are unnecessary.