Server Side Entitlement Status

Branch changes subscription manager substantially to use the server compliance API rather than calculating everything locally. Efforts were made to make sure we don't add excessive server chatter in doing this. 

This was done in two existing objects, the CertSorter and the ValidProductDateRangeCalculator. For the date ranges, we had to resort to getting the consumer info from the server, as this is the only place it is exposed.

Also included is a small start on a dependency injection framework, see the injection module. This basically just acts as a global registry of how we create objects we use internally in many places. It can alternatively be used to return an actual instance of an object (singleton).

Rather than any wholesale switchover we just used this when it helped in a testing jam during this work. When used this seems to be helping make for shorter and easier tests, so I am hoping we can refine and continue using it.