Adds updated shouldComponentUpdate. Faster and supporting arrays of cursors or properties

In the quest of removing the horrible inconsistent `{ shared: obj }` API-bit. We're doing like Sublime; adding multiple cursors. 

```js
Component([cursor1, cursor2], { someStatic: 'hello' });
Component(cursor1, { someStatic: 'hello' });
```

Note: Static change will not allow for component update, but cursor change will.

You can also pass in object literals instead of cursors to the component. This will fix the missing functionality from removing `shared` from static.

```
var sharedState = { inEditMode: true };
Component([cursor1, sharedState], { someStatic: 'hello' });
```

All documentation needs to be updated and this code needs Code Review. Also, deepEquals isn't implemented quite yet.
guarantee*