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 think this could be `range(p.start, p.offset)`. Here are some examples that show they are equivalent:
```py
>>> range(20)[5:10]
[5, 6, 7, 8, 9]
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(20)[5:3]
[]
>>> range(5, 3)
[]
```
Does not work if offset is negative.
```py
>>> range(20)[5:-3]
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
>>> range(5, -3)
[]
```