title: ngOnChanges not firing if an @Input is receiving an object
body: <p>Parent component template:</p>
  <pre class="lang-html prettyprint-override"><code>&lt;my-component [param]=&quot;whatever&quot;&gt;&lt;/my-component&gt;
  </code></pre>
  <p>Parent component code:</p>
  <pre class="lang-json prettyprint-override"><code>whatever = { value1: 0, value2: 1, value3: 'foo' };
  </code></pre>
  <p>Child component code:</p>
  <pre class="lang-js prettyprint-override"><code>@Input() public param: any;
  
  ngOnChanges() {
    console.log('Received input: ', param);
  }
  </code></pre>
  <p>This isn't working. Any change to <code>whatever</code> will be unnoticed by the child component and <code>ngOnChanges</code> won't fire.</p>
  <p>It also doesn't work if I try to use a setter:</p>
  <pre class="lang-js prettyprint-override"><code>@Input() set param(value) {
    console.log(value);
  }
  </code></pre>
  <p>And it doesn't help if I try to run a manual zone update in the parent component.</p>
  <p>Apparently <code>@Input()</code> can only detect when an object's structure has changed, but not its values.</p>
  <p>So how can I pass an object as an <code>@Input()</code> property and have the child component detect value changes?</p>