Improve client locking DO NOT MERGE

This PR does the following:

1. Adds a 'hidden' field to the UnlockTestCase so that staff can write tests that are hidden to students. These hidden tests are stripped when the tests are locked.
2. 'hash_key' is removed. Instead, questions are locked by using the assignment name as the hash key. @Some3141 , can you comment on the soundness of this approach?

Once #194 is merged, I'll add a command line utility that simply locks a given test directory (without doing auth or running any other protocols).