more idiomatic abstract methods

The even more idiomatic way is to use ABCs, but those work differently
in Py2 and Py3, and I wasn't sure if PyStruct targets 3.x