(maint) Don't munge the user's opts hash in `on`

Previously, if the user specified `:environment` in the opts to `on`
(or to a higher-level method that passes on opts to `on`), `on` would
delete that key when it was called. This not only makes it impossible
to call `on` sanely in a loop, but is generally a pretty shitty thing
to do to our users' data.

This changes the code to not modify the hash.