Improve performance

In this pull request, I switch to $watchCollection to gain a bit more performance over deep $watch ($watch with third params set to true). Also I added some caching to column calculation to avoid recreate columns every time. It does take into assumption that no item being removed from the source, only added, which is the case for most lazy loading site. I can feel that the grid is now render much faster compare to the original one. Thanks @mikenikles for pointing me at the $$createColumns function.