QueueCtrl: Add paging view

It takes a while to load all eight thousand PieceMetas, and nobody is
going to read through that whole list at once.  Use Beehive's new
'from', 'size', and 'count' query parameters to setup a paging view,
so we only need to fetch a handful of PieceMetas at a time.

I use parseInt [1] to convert the parameters to integers, otherwise
'from + size' can be string addition (and "4" + 10 = "410" is probably
not what you want ;).

I also use Math.max [2] to avoid starting at a negative position,
Math.min [3] to avoid "from 0 to 10 of 4", and <ol start="..."> to
adjust the list numbering [4].

[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
     From ECMAScript 1st Edition and supported by all major browsers.
[2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
     From ECMAScript 1st Edition and supported by all major browsers.
[3]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min
     From ECMAScript 1st Edition and supported by all major browsers.
[4]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol#Using_the_start_attribute
     Part of HTML 4.01 and HTML 5.
app/partials/queue.html: Add 3em left margin to <ol>

Otherwise large 'start' values were creating numbers that ran off the
left side of my page in Firefox v24.6.0.
QueueCtrl: Add a query box for custom searches

Use the keypress module from UI.Utils to bind the search to an 'enter'
keypress [1].

[1]: http://angular-ui.github.io/ui-utils/#/keypress
Shift HTTP configuration from $httpProvider.defaults into PieceMeta

We don't need these defaults for Elasticsearch queries, so push them
into the $resource initialization and leave the global defaults alone.
Add Elasticsearch dependency and use it for queue management

Using the Bower build [1] of elasticsearch.js [2].

If the initial query fails, I use indices.create to create the index
[3].  I specify a mapping (schema) for the new index [4,5] and use
PieceMeta.search to populate it.  During the populating chain, I use
$q.all() to reap groups of promises before hitting the next .then()
block [6].  Having the queue in Elasticsearch allows us to attach
arbitrary data to the queue entries without mucking about in the
PostgreSQL database that everyone else is using.

[1]: http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/browser-builds.html
[2]: http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/
[3]: http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-indices-create
[4]: http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.x/indices-create-index.html#mappings
[5]: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html
[6]: https://docs.angularjs.org/api/ng/service/$q
Add a 'username' service to get our name from Beehive
QueueCtrl: Add claim buttons (and display queue as a table)

Now you can click the claim button to claim pieces in the queue view.
I use toISOString [1] to get current date strings, and the 'update'
command [2] to post the new information to Elasticsearch.

I can't figure out why:

  .then(function(result) {
    $scope.search();
  }

doesn't work, so I've just dropped in a hack $timeout.  Perhaps
there's some time between Elasticsearch returning "200 OK" on the
update and actually regenerating the index?  In any case, this short
delay seems to work.  The only problem is that claimed items are
shunted to the back of our arbitrarily-ordered search results (perhaps
they are ordered by edit-time?).

[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
     Supported by major browsers and IE 9+.  Specified in ECMAScript
     5.1.
[2]: http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-update