templates: add aria-required attributes using a template tag

Previously I was doing this by adding an attribute to the field in the
Form constructor, but I've decided to move the logic to a template tag
instead.  This gives me greater control in the template itself over
which fields are given aria-required.  It also makes it easy to share
this functionality across different types of forms.
templates: remove the 'name' and 'email' form fields for authenticated users

These fields will be pre-filled using the logged-in profile.
templates: use comment.user_name instead of comment.user

comment.user will be None if the comment was left by an unauthenticated
user.  The user_name, on the otherhand, will always have a reasonable
value.
tests: add a test for comments left from authenticated users

The username and email should come from the authenticated user's
profile if it's not included in the form data.
models: add an is_draft field to the Post model

A custom 'published' manager returns all posts with is_draft=False.
Views that render published posts should never show a draft posting.
views: make a view for draft blog postings

The draft posting view uses the exact same template as the published
posting view, which makes it a very good preview of what the post will
look like once published.
admin: make Post.is_draft read-only

The is_draft field should only be modified via the publish() routine
which also takes care of resetting the pub_date and mod_date fields.
views: restrict the draft-posting view to staff-members only
admin: add a 'Publish' button to the Post admin form

As expected, pushing this button will publish the selected post.  The
button is only displayed for posts where is_draft=True or in cases
where the post does not yet exist in the database.
templates: print the authenticated user name above the comment form
css: make the body content a minimum of 500px
templates add a link to the admin site in the footer

The link will only be displayed if the authenticated user is a staff
member.
models: support adding tags to Posts

I downloaded the django-taggit package to assist with this.  In the
process I somehow managed to mess up my south migrations so i had to
delete and then regenerate them.
tests: add tests for tags and the related-content view
feeds: make a post's categories equal to its tags
css: modify the form layout

I made the entire form wider, and expanded the size of each input area.
comments: absorb the built-in comments app into my own app

All I did was copy the relevant code into my own comments app
directory.  More work is required to make this stuff actually work
together.
comments: changes to get the new comments app working

At this point the tests all pass, although I suspect that there are
other problems in the comments app waiting to be found.  I had to
rename to comments.py files to comment.py, and for some reason the diff
displayed here doesn't reflect that the files were just renamed.  Hmmm
...
admin: beef up the default comment admin
models: add an is_spam field to the Comment model.

The CommentModerator will check if the comment is spam as part of its
moderate() routine.  At the moment no actual spam checking is in place.