Lots of changes, again!

Some changes to reflect changes to Haferlib. Made factories throw
IOExceptions rather than InvalidArgumentExceptions or
NullPointerExceptions from setDirectory, as their contract already said
they should. Added SetupState, where the user can specify the location
of the worlds folder.