Introduce MaybeOwningPtr, a smart pointer that may (or may not) have