Why is this defined in `graphviz`? It should be defined in `std::vec` instead, just as how `std::str` has `MaybeOwned`.

The naming gets a bit weird though. `str::MaybeOwned` would suggest that this should be called `vec::MaybeOwned` with variants `Owned` and `Slice`, except `str::Owned` holds a `~str`, not a `StrBuf`. Some thought needs to be given to how this should be adapted to a `Vec`/`StrBuf` world.

As for a DST-aware generic `MaybeOwned`, `~[T]` and `~str` are not so useful anymore, so we'd still need separate enums for strings/vectors that use `StrBuf` and `Vec`.

Given that "owned" doesn't really work properly for `Vec`/`StrBuf`, maybe it should be flipped around and called `MaybeSlice`? I am not sure what to call the variant that holds the `Vec<T>` though.