Here is the current state of my work. It contains the spans patch in modified form. This first step changes the class structure to have more abstract classes and generics. At the end I will move the abstract classes and their implementations to @lucene.internal classes.
MTQ will still have all rewrite modes as final constants (except span), but implementations will go away.
For backwards compatibility i would keep empty subclasses of the 3.0 classes that were public (like the autorewrite) like the empty TermAttributeImpl skeleton.