Add prett{y,ier} error pages for 40{0,3,4},500s

Add two different kinds of error page:

- an almost completely styled error page for "soft" errors such as 403
  and 404
- a barebones error page for "hard" errors like 400 and 500

The motivation here is that in the event of a "hard" error, we want to
provide as small a number of places as possible where further things can
go wrong. This is compliant with Django's own philosophy, which doesn't
even provide a RequestContext to 400 and 500 default views (which in
turn implies that context processors are not run for these pages).
Merge remote-tracking branch 'origin/master' into haystack
search: add search to 404 page