Source code automation [PD-536]

This could use a good review to make sure I didn't overlook anything obvious. Also taking suggestions on alternatives to any weirdness you may see.

All tests pass.
default_storage.save() returns the final file name. I can do something with that (return to the user?) if that seems to be valuable.