Start unit tests for source.py

Adds ids to forms so they can be distinguished by the tests. Small fix to silly
broken code for detecting if the upload form includes a file upload.

The ValueError exception that occurs after the tests run is spurious. It is
caused by a call out to generate a key for the source, which is async.
Meanwhile the tests continue, and tearDownModule wipes out the test directory,
so when gpg is done generating the key it has no keyring to write it to and
exits with an extra-special error code.