Reports

This is the initial reports @rcrichton and @devcritter please take a look.
I'm a bit worried that making these to calls to the metrics API is expensive, especially if we are doing this for every user. Perhaps we should store the metrics that we receive for a particular channel in memory (maybe using a map of `channel.id`) and if that they are requested again then we can just return them rather than calculate them again. This should make things much faster for a large number of users.