apidoc: Various improvements to display and backend of apidoc

This introduces a better OOP feel to the API documentation when documenting each view, as well as a brand new design to the actual user-facing apidoc page.

[User-facing apidoc page](http://stuff.nasonfish.com/dnsdoc.html)

[Introduction to apidoc](http://stuff.nasonfish.com/apidoc.html)

Also in this pull request (not requiring your review, but are mostly here for chronological purposes):
 - Solution to follow-up of issue 16: coupon codes now will tell the user if they are expired instead of charging full-price
 - Suggested by @puffrfish: display nicknames and nodes (if they're `xenvps`s) of services on a user's profile page for admins
 - Confirm deletion of DNS zones, since it's far too easy to accidentally delete a zone.

EDIT: Added displaying statistics about current promotions per issue 18