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 don't think that'll work for the end of the date range though:
```py
>>> range(15)[10:20]
[10, 11, 12, 13, 14]
>>> range(10, 20)
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
```
`range` gives you the possibilities, pagination and slicing pulls from that set.  It might work anyways, depending on the specifics, but it's not 1-to-1.