code: function buildIndex(array) {
      var index = {};
      array.forEach(function (item, i) {
          index[item.key] = i;
      });
      return index;
  }
docs: TODO: Revisit all of this diffing stuff: - Make it more efficient - It's currently hard to understand because it makes aggressive assumptions (e.g. each item has a key and each item has a winControl) - Is it correct? - Should we just sync an array with a binding list instead of computing edits based on 2 arrays and then applying them to a binding list?