[WIP] Optional type

Done:
- returning double or none
- comparison of optional(any_type) with none

TODO:
- optional(type) as argument
The only requirement is that identity implies equality, i.e. `a is b` implies `a == b` (and, conversely, `a != b` implies `a is not b`... except for NaNs!). Simplest would be to implement identity as equality for scalar values, since it's very cheap.
But we may as well not support it for non-object values.