function Queue(capacity) {
    this.contents = new Array(capacity);
    this.start    = 0;
    this.count    = 0;
  }
A "rolling" queue, with a fixed capacity. As items are added to the head,
excess items are dropped from the tail.

@private
@constructor

@examples
var queue = new Queue(3);

queue.add(1).toArray()        // => [1]
queue.add(2).toArray()        // => [1, 2]
queue.add(3).toArray()        // => [1, 2, 3]
queue.add(4).toArray()        // => [2, 3, 4]
queue.add(5).add(6).toArray() // => [4, 5, 6]
queue.add(7).add(8).toArray() // => [6, 7, 8]

// also want to check corner cases
new Queue(1).add('foo').add('bar').toArray() // => ['bar']
new Queue(0).add('foo').toArray()            // => []
new Queue(-1)                                // throws

@benchmarks
function populateQueue(count, capacity) {
  var q = new Queue(capacity);
  for (var i = 0; i < count; ++i) {
    q.add(i);
  }
}

function populateArray(count, capacity) {
  var arr = [];
  for (var i = 0; i < count; ++i) {
    if (arr.length === capacity) { arr.shift(); }
    arr.push(i);
  }
}

populateQueue(100, 10); // populating a Queue
populateArray(100, 10); // populating an Array