Various parameter cleanup

There's now three layers of ways to specify parameters, in decreasing order of precedence:
1. Setting global values
2. Reading stuff from config
3. Default values (these should be immutable)

This refactoring avoids the hack we've had where we change the default values for global parameters. It also cleans up how we read from config – it's all just three cascading levels. It also removes some stuff in interface.py to set up config for some environment params
`conf.get` either returns a string or raises an exception right? The reason why I had to add that check was that the unittest mock out `conf.get` to return `None`. But maybe I should change the mocking instead