Fixed #23420 - broken warning for unbound naive datetime objects

Fixes issue with warning message displayed for unbound naive datetime objects when `USE_TZ` is True. Adds unit test that demonstrates the issue (discoverable when using a custom lookup in MySQL) and clarifies docs.

Ticket [#23420](https://code.djangoproject.com/ticket/23420)
Yes. This bug was happening with a custom `DateTimeField` transformer, when `get_prep_value` was being called on the unbound field and warning about the datetime being naive. In the test included in this patch, `DateTimeTransform` is intended to convert from a DB integer field storing a Unix timestamp into a datetime. The transformer documentation suggests this:

> we may have wanted to specify output_field = FloatField, which will ensure that further lookups like abs__lte behave as they would for a FloatField.

In practice, though, the required behavior appears to be returning a new unbound instance of the field, e.g. `output_type = FloatField()`. This isn't used much in the code, but see for example [here](https://github.com/django/django/blob/master/django/db/models/sql/aggregates.py#L106) and  [here](https://github.com/django/django/blob/master/django/contrib/postgres/fields/array.py#L207).

Perhaps the documentation change should have been separate from the warning fix, but as I discovered the two issues together I combined them. Let me know if I should break this out into its own ticket.