Preserve options

Fixes #273, #256.
Necessary for #261, #248, #275

This is intended to start some progress towards maintaining an options object. `evaluate` now always receives an options object, but there still seem to be some bugs - ~~the newly-added test-cases are failing~~ (not anymore).

As this contains a lot of changes, I previously merged all PRs that seemed reasonable to me.

I tried to include everything discussed in #274. If I forgot something, please mention it. Also, feel free to send PRs to the `preserve_options` branch :)