BLOCKER: Issue 487

Note that this PR touches all code that deals with files and is ready for review.
These variables all default to `None`, but then are assumed not to be `None`.  If you are going to default to `None`, it should be for a reason; I would either explicitly check if they `None` right after line 41 and do something (such as raise an error), or simply not have a default so that if there is an error, it is raised on the call to `get_argument` and easy to track down.