Use Time.zone when available and cleanup coercion

- Check for `Time#zone` and use it when appropriate
- Move coercion logic to `#to_date`
- Test coverage for zone support