Fix core::optional<T>::value_or.

Finish adding tests for core::optional<T>. It also now passes all tests!
Fix typo in noexcept signature for core::optional<T>::swap

This also brings core::optional<T> to be complete, or at least as
complete as it can be due to it focusing on C++11.