title: Does ngFor directive re-render whole array on every mutation?
body: <p>Let's say we have an array of items:</p>
  
  <pre><code>items = [
      { title: 'item 1'},
      { title: 'item 2'},
      /* ... */
  ];
  </code></pre>
  
  <p>And there is a template that renders this array:</p>
  
  <pre><code>&lt;ul&gt;
      &lt;li *ngFor="let item of items"&gt;{{item.title}}&lt;/li&gt;
  &lt;/ul&gt;
  </code></pre>
  
  <p>Wll angular2 rerender the whole array if I add/remove items via <code>push</code>/<code>splice</code> or will it only add/remove the markup for the corresponding items? If it does updates only, then is there any difference in mutation stategies -- should I prefer push/splice over array replacing? In other words, are these two approaches equivalent in term of rendering performance:</p>
  
  <pre><code>/* 1: mutation */
  this.items.push({ title: 'New Item' });
  
  /* 2: replacement */
  var newArray = this.items.slice();
  newArray.push({ title: 'New Item' });
  
  this.items = newArray;
  </code></pre>