Anti-evil features in preparation for user-creatable streams.

This is a batch of core anti-evil features that I feel are necessary before user-creatable streams are allowed. 

* A couple of tweaks to the discussion sidebar: removed and deleted posts won't be shown anymore and a data attribute can be used to override if a bad thread is put in.
* Contributors are now invited like moderators rather than directly added.  There's a quota on the maximum number of invites that can be outstanding at any given time.
* Events can be reported for breaking the sitewide rules. An admin interface is provided to view the reported events, counts by type of report, and to ban/approve them.  Banned events are not visible to users.
* Admins can create events from the UI.

![output](https://cloud.githubusercontent.com/assets/338853/3206860/89916b86-edcf-11e3-8086-23f4b0e59b91.gif)

I would like to roll this out as soon as possible (the weekend notwithstanding) to pave the way for user-creatable streams as soon as the end of next week (world cup).

:eyeglasses: @chromakode @umbrae @Deimos 

Notes: 

* there's some JS in the templates. This was deliberate to keep stuff that will never be used by non-admins out of the big bundle to save download time)
* I split the controllers up to separate files in the second to last commit. this makes the diff pretty hard to read.  Recommend reading separate commits.
Yes, definitely.

On Monday, June 9, 2014, Neil Williams <notifications@github.com> wrote:

> In reddit_liveupdate/controllers.py:
>
> > +        report_type=VOneOf("type", pages.REPORT_TYPES),
> > +    )
> > +    def POST_report(self, form, jquery, report_type):
> > +        if form.has_errors("type", errors.INVALID_OPTION):
> > +            return
> > +
> > +        if c.user._spam or c.user.ignorereports:
> > +            return
> > +
> > +        already_reported = LiveUpdateReportsByAccount.get_report(
> > +            c.user, c.liveupdate_event)
> > +        if already_reported:
> > +            self.abort403()
> > +
> > +        LiveUpdateReportsByAccount.create(
> > +            c.user, c.liveupdate_event, type=report_type)
>
> I really hate that python stole a very useful terse word for a function
> that's generally considered unpythonic to use!
>
> I looked at cleaning this up earlier and it's a bit endemic as core
> permissions code uses "type" everywhere. Can I defer this fixup to a later
> date?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/reddit/reddit-plugin-liveupdate/pull/64/files#r13574954>
> .
>