Add c++14 optional<T> polyfill

This is incredibly helpful when modeling "maybe" types (instead of `nullptr`).

```cpp
optional<string> maybe_str = get_optional_string_somehow();
if (hello) {
    string actual_str = *maybe_str;
} else {
    // maybe_str was empty
}
```