User configurable reports

the plan is to pilot/QA on this on prod so I'm putting it out for code review now. I'm guessing it's easiest to review as a whole, though the commits should represent ~atomic actions.

I think it's good to merge whenever code review passes.
I'd actually vote to just changing it to return a `list`. Iterators get "used up" the first time you go through them which can cause problems downstream if they end up getting run through twice.

Pendantic side note, @millerdev was probably just a slip of the finger but I don't think you used the word iterable right (http://stackoverflow.com/a/9884259/240553), since a both the return value of a generator function and a list are iterables.