fixes serialization of PailStructure with unserializable state
fixes PailStructure serialization efficiently

* My previous fix for PailStructure serialization reconstructed the serializer and vertical
* partitioner every time they're needed. It'd be more efficient to create them once, any time an
* instance of a PailStructure is created. This requires customizing the class' serialization
* behavior by marking the fields as transient and overriding the writeObject/readObject methods.
* Unfortunately, the spec calls for these methods to be private, which can't be implemented from a
* Clojure gen-class. The solution I came up with is to introduce an abstract base class that
* declares the necessary serialization behavior and let the gen-class macro define the rest of the
* behavior.