Fix #localtime and #gmtime when they are given numeric offsets

Both methods now use a common arg parser to determine the time zone from
the passed IRubyObject. Additionally, #localtime always modifies the receiver
now per the documentation, rather than returning a new object if an offset
was passed.
Merge pull request #2095 from cheald/fix_time

Fix #localtime and #gmtime when they are given numeric offsets