Fix DST offset for `occurs_on` using local times

When building a new time for `beginning_of_date` / `end_of_date` we now
use `Time.local` or `Time.utc` correctly to apply the right offset for
the time of year (in absence of ActiveSupport). Previously, only a
"non-local" time with a fixed offset was was applied so a reference time
6 months from the target date could have the wrong DST offset applied.

This now matches the same order of zone lookup used in `match_zone`.
The fallback is to use the fixed offset only when no correct zone
information is available.
Merge pull request #245 from avit/issues/245

Fix `occurs_on?` misses when time is near midnight
Update CHANGELOG.md
Simplify with modular arithmetic
Simplify nested conditions with early returns