Refactor Generator into Document

Base now covers everything needed for this class.
Add methods to handle required nodes

required?(node) - checks if node is required
required(node) - sets node to be required
not_required(node) - removes node from required list
Add valid? method
set_node now accepts a Hash of options

Current options:

require - true|false : is this node required?
more work on Diver class