Fix TimeWithZone#to_time to return self instead of utc

A previous change to TimeWithZone#to_time returned utc. This is unexpected and doesn't match the comment above the method. The original change was made to simplify the <=> override on Time. Using a different technique achieves the same result while preserving the expected to_time behaviour.

Also added better tests for the temporal classes when they should return self i.e. Time#to_time, Date#to_date and DateTime#to_datetime.

Inexplicably Ruby 1.9 does not return self from Time#to_time, but getlocal instead. I wonder if we should override this?