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 :)
I think that what we list here are the methods that are required in order to be a `Context`.  Are we planning on removing all external uses of `_push`, `_pull`, and `_execute`?