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.
If the desire is to update the table with new columns / constraints etc then `extend_existing` is correct however if you just want to return the table as is (or create it if it's not already in the metadata) then you should use `keep_existing`

See http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.Table.params.keep_existing