Very loose outline for the most important classes. No implementations
yet. Also very unsure about AtomarMove. Is it necessary?