Rearch to 1.8.0

We have completely redesigned some internals of the grid to greatly improve performance.

1: The way we treat rows vs the user data:

The "rowCache" is now static and is kept the same length as the data. When sorting, we don't sort your data, instead we make a copy, sort it, and then reassign the "entity" property of the row object to the corresponding model. this greatly improves the performance of filtering, sorting, data-reassignment (you can now update the data very frequently sub-1 time /sec), and scrolling.

for editing, we no longer bind directly to your model. We keep a copy of the model in memory and use that for manipulation if using the edit mode. This allows us to not touch your data in any way so your data remains intact and is not "decorated" by anythign ng-grid related.

2: adding convenience methods to the options that allows you to programmatically select rows:

```javascript
// method for user to select a specific entity programatically
// @itemIndex : the zero-based index of the user's model
// @state: boolean value for whether or not to select the row.
options.selectItem = function (itemIndex, state)

// method for user to select a specific row programatically
options.selectRow = function (rowIndex, state)
```