Make BaseContext into an Abstract Base Class

It's not meant to be instantiated on its own, and making it an ABC (with `abstractmethod`s) highlights what the subclasses implement.

If we wanted to make `BaseContext` more purely an interface, we could pull out an `ArrayCreationMixin` and an `IOMixin`.  Just an idea :)