Support creating and modifying repos

There are a few TODOs in here which I plan to address, but opening to get feedback on the approach so far.

ping @titanous 
This currently assumes that all signing keys are available. The root key will certainly not always be available, does it make sense to split this into multiple methods that only work with their role?