basectx is very well and good, but we have two other filectx-like classes
that do not inherit from it (arbitraryfilectx and absentfilectx`), and
cannot, because basectx is still rather tied to representing a file in a
changectx.
Let's add some structure to these classes with a mininum set of abstract
methods enforced by the ABC module.
For a separate patch: I find it weird to refer to these undefined fields (_repo and _path). Can we pass these into the constructor (which is currently not defined) and assign them there?