Fix handling of timestamp and datetime columns on PostgreSQL

Timestamp columns are defined as `timestamp with time zone`, datetime columns as `timestamp without time zone`. PostgreSQL converts timestamp values from the local time zone to UTC for storage and back; datetime values are treated as-is. This is in line with MySQL.

While there:
* Push superfluous column type casting down to super.
* Make a number of regular expressions a little more efficient.
* Improve documentation spelling and completeness.