Refactor licence details

The methods to pull together the licence details were a little complex and having multiple methods in the RootController to collect licence info felt wrong. This change pulls that code out into its own class.

It still relies on the existing tests for licence handling but some of those could probably be reorganised to test this class more explicitly.