Add Builder and Reader ABCs for each struct type

This has zero overhead if not used.  I decided that it was simpler
to use ABCs instead of real classes, given that using real classes
offers little benefit.

This also implements == and != for StructSchema objects.

NB: This fails tests, but so does the current develop code.