Merge changes from snow-common.
Adding maybe.hh

- Defines maybe_t<T> where T is a type that may be included as part of
  maybe_t (as an optional<T> member named `success`). If T is void,
  it contains no success member and is simply a success by whether or
  not an exception is thrown.
- Defines `maybe(func) -> maybe_t<decltype(func())>`, which executes
  func and returns a maybe_t. The result is either a success if no
  exception is thrown, otherwise a failure if an exception is thrown.
  `maybe` swallows the exception and returns its exception_ptr in the
  failure member of maybe_t.
- Provides a couple auxiliary functions for working with exceptions.
Skip pointless exception_is call in exception_what.
Document maybe.hh functions/types.