Remove duplication from time/date

Move multiple date/time calculations into DateAndTime::Calculations module.
Methods moved (or slightly changed):
:ago, :beginning_of_day, :middle_of_day, :advance(some logic is moved into private
method), :seconds_until_end_of_day, :beginning_of_hour, :beginning_of_minute.

Date#change is now aware of hours/minutes/seconds and when they are passed to
it a TimeWithZone will created for that date at midnight. The following new
methods are a results of this: Date#seconds_until_end_of_day, Date#beginning_of_hour, Date#beginning_of_minute

Another new method is Date#to_i which returns the equivalent number for TimeWithZone#to_i at the beginning
of the day. This will allow using Date#seconds_until_end_of_day, which will
always return 86399.