code: function (list, x, prop) {
              var val, mid, low = 0, high = list.length;
              while (low < high) {
                  mid = Math.floor((low + high) / 2);
                  val = prop ? list[mid][prop] : list[mid];
                  if (val < x) {
                      low = mid + 1;
                  } else {
                      high = mid;
                  }
              }
              return low;
          }
docs: Left bistect of list, optionally of property of objects in list
  @param   {Array} list List of items to bisect
  @param   {number} x    The number to bisect against
  @param   {string} [prop] Optional property to check on list items instead of using the item itself
  @returns {int}      The index of the bisection