Implement the debugstatus package.

Abstract out some helper functions to be used in the charm store and similar services.

(Review request: http://reviews.vapour.ws/r/628/)
I don't know if callers using different keys is really harmful. However, if checkers return their keys then it's more difficult to reuse the same checker closure more than once. or instance, the CheckConnection in the current implementation could be used with different pingers, and the caller is free to provide different keys.
A more general question I had while looking at the existing code is: do we really need those keys? Can't debug/status return just a slice of results, given that we already have a name for each check? In that case, then we could just drop the map and use ...CheckerFunc as you suggested.