Add messages to all preconditions. Allow null file paths through.

Closes #58.
Merge pull request #59 from square/jw/fixin-thangs

Add messages to all preconditions. Allow null file paths through.