XRef and XRefMut ================ When you want to return some data that might be either owned or borrowed, it is common to return a `Cow`. However, `Cow` has the following limitations: * `T` has to be `ToOwned`, and * if the data you want to borrow is behind a `RefCell`, you can't. `XRef` is like `Cow`, except addresses the above limitations with the following differences: * `T` does not have to be `ToOwned`, (this means that now the type contained in `Borrowed` and `Owned` have to contain the exact matching types), and * `XRef` has a third variant `Ref` which holds a `std::cell::Ref`, for cases when the value is borrowed from a `RefCell`. `XRefMut` is like `XRef` except that * all references are borrowed mutably (i.e. `XRef::Borrowed` holds a `&mut T` instead of `&T`, `XRef::Ref` holds a `RefMut` instead of a `Ref`), * `XRefMut` implements `DerefMut`, to allow borrowing data mutably without cloning.