Fixed #23867 -- removed DateQuerySet hacks

Removed DateQuerySet and all related classes to it. Previously Django used a Compiler subclass to implement value conversions for DateQuerySets. Now with the new expressions and converters APIs this isn't necessary any more. We can just use plain queryset methods and an expression to implement what we want.

The code now calls expression.get_db_converters(), where it applied blindly expression.convert_value before. The biggest problem currently is that expression.get_db_converters() is called *after* database's get_converters method. The comments in the code say that the expression.convert_value should  be called first. I believe I need to make some more changes here before the build passes.
An explanatory comment about why DateTimeField is fine with USE_TZ=False would be helpful. If you just want to leave it here, I can add it and make the other cosmetic changes.