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.