Get better grades

- break up into smaller classes
- new FileNameBuilder class
- DomElement initializer hash only uses strings as keys.