Read options into temporary structure before committing them to internal store.

This means that parse errors should no longer leave the config object in
an partially updated state