Allow for default construction of optional<T>.

In order to comply with the interface of `std::optional<T>`, we should make it possible to default-construct optional objects. The post-condition shall be the same as in the standard: the object is an a *disengaged* state.

Achieving this involves either adding an explicit default constructor or providing a default argument for the `none_t` overload. This patch uses the latter technique.