Basic styling and extension listing

This adds some basic Bootstrap-based styling for the app, a drag-and-drop upload widget, and a simple extension listing table. 

The commits are fairly semantic, so you should be able to review them in order if you want (and that will also help if we end up wanting to take out the upload widget, for example).

A few notes:

* I decided to go for the upload widget since Bootstrap doesn't have a nice style for the standard file upload field, and it was hard to figure out how to make that feel good anyway :)
* The upload widget is Dropzone: http://www.dropzonejs.com -- I picked it because (compared to other widgets I found) it was relatively straightforward and didn't require any particular framework.
* In order to use the upload widget, I also made it so that the various routes return JSON if requested, as well as proper HTTP status codes. I'm not totally sure if I'm using the right codes for various error cases, so feel free to let me know if you have suggestions for better ones.
* There are a few functional/usability issues that aren't yet addressed in this pull request:
  * You don't have to drag-and-drop onto Dropzone--it supports just clicking anywhere on the field to bring up an ordinary browse dialog. The message that shows up when it's empty is supposed to tell the user that, but it doesn't right now, so I need to figure out how to customize it.
  * I'm just using the default Dropzone "basic" appearance. When an error occurs, the error message shows up on mouseover (and is kind of ugly). I want to redo the display template so that the error message shows up directly (and also tweak the initial size/appearance to look more drop target-y).
  * The extension listing doesn't refresh when a new extension is uploaded. This will need to be done via AJAX, so I might end up going ahead and including jQuery for convenience.