Zuul status page: Rewrite (bug fixes, bootstrap markup, redesign)

Bug fixes:
* Fix race condition where JS will start another update
  while the previous one has not ended yet (e.g. timeout or
  slow server) by exposing the Promise object from $.ajax
  and scheduling the next update asynchronously from the complete
  callback instead of directly after calling update();
* Added an error handler for the ajax call. Previously an error
  would be silently ignored and old data removed. Now the old
  data stays on the page and an error message is added on top.

Enhancements:
* Add sample JSON files for local testing (triggered by
  adding ?demo=basic or ?demo=openstack).
* Only re-parse the DOM if there was a change.

Cleanup:
* Prefix class names with 'zuul-'.
* Remove unused css code (presumably copied from openstack).
* Simplified logic result class determination.

Redesign:
* The page is dimmed until the first update is ready. This makes
  for a smoother experience by not having the page redraw a couple
  times but instead present it as a whole.
* The "message" contaitainer now slides in/out when it activates
  or deactivates.
* Use Bootstrap markup and classes for the overal design.
  Added a few extra classes to better fit the content (not all
  scenarios are covered best with the default bootstrap css).
* Using a nav-list construction for the job lists. This means
  the links occupy the list as a block-level element, making the
  entire row clickable instead of just the text at the beginning
  of the line.
* Use lowercase labels instead of uppercase for the job result.
* Enable the footer of the integration-wide template class.
* Move WMF logo to the left and center it vertically with the
  page heading. Also swapped it for the version without the
  "Foundation" subtitle.
* Change (ellipsis-ified) queue title from <a> to <abbr>.
  Having an anchor tag with a title looks weird as it has no
  href, <abbr> seems like the better fit here.

Change-Id: Ifa93f856f29e1a2fe7b27e0b5a9d7e43935d8acc
Zuul status page: Re-organise as object

* Removed unused purgeGraphs code
* Save XHR object and abort ajax request in update() if the
  previous update is stil running. This allows, for example,
  document.onshow to call update() outside the scheduler without
  accidentally starting another loop or requesting simultaneously.

Change-Id: I4cd0fd0ce3e1005a918e42d0800de80b35def5dc