Port WordPress get_calendar() code to announcements post type

We'll modify it from here to support WSU announcements and, fingers crossed, eliminate a bunch of stuff as well.

We *may* want to switch to a transient first as I'm not confident in our object caching yet, but we'll see.
Code familiarization and cleanup

Modified code formatting as I read through the code for the first time as this is originally code from WordPress 1.0.0.

Changed the cache key and changed queries to use our post type slug instead of posts.
Query post meta for announcement date information

The dates on which announcements are published are stored in post meta as each can be published up to three times. We can use a query based on the meta key to grab the dates we're looking for rather than wp_posts
Remove unnecessary daily link title code

This would create some crazy long titles for our calendar dates (I think). Instead we can move toward something that uses the day as the title.
Use a proper link to the daily announcements
Zeroise the day so that the query doesn't fail
Round about queries to find only dates with valid announcements.

First query for any posts with this month's meta key
Then query for posts that are published or private from the results of the previous query.
Finally, query for distinct meta keys for the published posts so that we can display what we want.

We should remove private from the query as we don't have much use for it.
Remove post status private from the calendar query
Adjust the title on the calendar day link
Remove the previous and next month queries, but leave placeholders
Document new month and day link generation functions
Update documentation for our modified method
Avoid displaying announcement pages for dates in the future.
Have the caption suit our needs
Introduce a widget to display an announcements calendar
Add another class to the widget output
Use transients rather than object cache for the time being

I can't guarantee that an object cache is available yet and there are a few queries involved with building the calendar. Using transients to at least store in the DB for 24 hours before deleted, if not flushed before then.

Also fixes our hooks to delete the cached value.
Only purge the calendar cache when we're saving or deleting an announcement

In the future it'd probably be worth hooking on to update as well just in case a date was changed at some point.
Merge pull request #1 from washingtonstateuniversity/announcements-calendar

Introduce a calendar display for WSU Announcements