Refactored Archive controller.

Those chained `.orElse{}` statements have been annoying me for a while, hopefully this is easier to read/ understand.

 Also changed most of the tests to actually invoke the controller and test the output instead of hitting the implementation methods.
@phamann I was right, there was no explicit timeout on this, might be the source of those occasional problems.