Use copies of GridRows to eliminate DOM thrashing

I've been experimenting and profiling (with IE11), and the way the `renderedRows` array was being updated was causing the `uiGridViewport` contents to be completely re-rendered by Angular on scrolling.

This change basically creates a separate set of `GridRow`s in the `renderedRows` array, then copies the values from `newRows` into them instead of replacing the elements in the array.

I don't know what I've missed with this, I've probably broken a ton of stuff, but... check the performance difference out in Chrome. :dash:
Would probably be simpler to make this:

```javascript
GridRow.prototype.clone = function() {
  var copy = new GridRow(this.entity, null, this.grid);
  copy.copyFrom(this);
  return copy;
}
```

In fact, I think `copyFrom` should be chainable (return `this`). It makes sense in any situation I imagine it being used, but it also makes things even cleaner:

```javascript
GridRow.prototype.copyFrom = function(sourceRow) {
  this.entity = sourceRow.entity;
  this.uid = sourceRow.uid;
  this.visible = sourceRow.visible;
  this.height = sourceRow.height;
  return this;
};

GridRow.prototype.clone = function() {
  return new GridRow(this.entity, null, this.grid).copyFrom(this);
};
```