Refactor selection of repository/observer based on argument

Move the complex logic used to choose the document type to be
republished, and obtain its observers and registries down into a
testable class and away from the (untested) republish_documents script.
Use structs rather than 2-element arrays

Now that we've moved the definition of which repositories and observers
to work across when republishing documents further away from where
they're used, instead of passing around "magical" 2-element arrays, pass
around structs with reasonable attributes instead.
Merge pull request #241 from alphagov/allow-argument-to-republish-documents-refactor

Refactor selection of repository/observer based on argument