WIP: OptionSetPresenter refactor
WIP: OptionSetPresenter refactor, working
Finish refactor of OptionSetPresenter

This goes all the way and extracts the behavior into a class that can be
used to coerce the values of a hash to types specified in a hash of the
same structure.

The methods are now much less complex and hopefully easier to follow.
The specific coersion behavior has been extracted into individual
classes.

Note that the coersion behavior here might not be always be what you want,
e.g. for the StringCoercer, an empty string is coerced to nil, and for
the IntegerCoercer, nil stays nil (it isn't coerced to 0).