Create login_required AbstractView and ajax_endpoint decorator.

The AbstractLoginRequiredView derives from AbstractView and adds a check
that the user is logged in arround the view() method, which handles all
requests comming to an AbstractView.

I used this to protect the add_proposal and ask_question views.

I also made a page that the user will be sent to if she attempts to
access a login_required page when she isn't logged in.  It remembers the
page she was trying to access and redirects there after successful
login.  This page is the default place that AbstractLoginRequiredView
sends unauthenticated users, but one can change this by overriding
`get_login_page`.

I made a wrapper for ajax endpoints that should use authentication.
It will do two things.  First, it authenticates the user from which the
request came.  Second, if the request contains a POST variable user, it
will make sure that this is the same authenticated user tied to the
request.  This second part is optional, and the developper must provide
the form class to the decorator for it to be executed.  It's important
because it prevents authenticated users from imporsonating some other
user.

I protected comments and voting in this way.

Also, to prevent surprise from the user, I altered the comment and vote
widgets so that they will be disabled for an unauthenticated user, and a
tooltip appears telling the user they need to login.  This was done
using the jquery tooltip function, which is already in our codebase.

This means that, site-wide, if an html element has a `title` attribute
on it, the text in the title attribute will become a tooltip.  This is
a global behavior, and is switched on inside the head section of the
`__base.html`, currently near line 49.

Now I just need to continue to add authentication required status to the
other views and POSTS around the site that need it, using the
AbstractLoginRequiredView and the `ajax_endpoint_login_required()`
decorator.
Add tooltip and is_enabled attributes to VoteForm

Last commit I was computing wether a vote form should be enabled in the
template.  I've moved this logic into the view.  This is a better place,
because we need to consider both whether the user is logged in, and
whether the user is the author of the content being voted on (users
shouldn't be able to vote on their own content!).

To pass the results of these considerations through to the template,
I bind them to the VoteForm itself.  This involved adding two attributes
to the VoteForm in forms.py.  Corresponding attributes have been added
to the javascript object that handles the state of a vote form, and its
commutication with the server, on the client side.
Add generic AddPost view

AskQuestionView is a class-based view which was basically passing a
QuestionForm to a fairly generic template.  There are several other
cases where we just need to pass a form through to a fairly generic
template.  So, I abstracted out everything that was specificaly
QuestionForm-related, and made an abstract MakePost view.  Now
AskQuestionView just inherets from that and overrides with
Question-specific stuff.  The corresponding template was renamed from
ask_question.html to make_post.html too, and question-related stuff was
stripped out.

Then I subclassed the generic MakePost view to make a
StartDiscussionView.

Some of the patterns used to make `MakePost` and `make_post.html` both
abstract could be applied to other views, which will move some of the
display calculation up to the views, and hopefully decrease the number
of unique templates needed for the site.  That's a TODO for later.
Enable signing petitions, and require login

Signing petitions has been enabled.

Creating a new petition has been enabled too.  I used the generic
MakePost view and associated make_post.html template.

I extended the functionality of the JS Toggler widget, so that it can
swap the visibility of two divs, rather than just show/hide one.

Also added the ability for it to toggle the message displayed in the
toggle switch.
implement new layout
extentd most tests to login as needed

Also, I patched up a security hole in the AbstractLoginRequiredView.
This needs documentation.
all tests passing
full test coverage of authentiacation of views and endpoints