Preserve options

This is intended to start some progress towards maintaining an options object (fix #273). `evaluate` now always receives an options object, but there still seem to be some bugs - the newly-added test-cases are failing.

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 :)