Add support for :nsec option to Time#change

This is a follow-up of https://github.com/rails/rails/pull/16765 and is based on that branch.

Closes #16392.
Bit confusing to set both `new_usec` and `new_nsec` then overwrite `new_usec` if `:nsec`. Contrast with wrapping in a conditional:
```ruby
if new_nsec = options[:nsec]
  raise ArgumentError, "Can't change both :nsec and :usec at the same time: #{options.inspect}" if options[:usec]
  new_usec = Rational(new_nsec, 1000)
else
  new_usec = options.fetch(:usec, ... ? 0 : Rational(nsec, 1000))
end
```