Implement events

# DO NOT MERGE YET

- [x] hoodie.store.on('add', function(object, options) {})
- [x] hoodie.store.on('update', function(object, options) {})
- [x] hoodie.store.on('remove', function(object, options) {})
- [x] hoodie.store.on('change', function(eventName, object, options) {})
- [x] hoodie.store.on('sync', function(object) {}) #27
- [x] hoodie.store.on('clear', function() {}) #28
- [x] add / update / remove events with {remote: true} option #36
- [x] trigger "add" event when new object gets pulled from remote  #37 

```js
hoodie.store.on('add', function(object, options) {
  console.log(object.name, 'added');
})
hoodie.store.on('update', function(object, options) {
  console.log(object.name, 'updated');
})
hoodie.store.on('remove', function(object, options) {
  console.log(object.name, 'removed');
})
hoodie.store.on('change', function(eventName, object, options) {
  console.log(object.name, 'changed');
})


hoodie.store.add({id: '123', name: 'Finn'})
// < Finn added
// < Finn changed

hoodie.store.update(123, {name: 'Marceline'})
// < Marceline updated
// < Marceline changed

hoodie.store.remove(123)
// < Marceline removed
// < Marceline changed

hoodie.store.add({name: 'Jake'},{name: 'BMO'})
// < Jake added
// < Jake changed
// < BMO added
// < BMO changed

hoodie.store.removeAll()
// < Jake removed
// < Jake changed
// < BMO removed
// < BMO changed
```

Changes can also come from remote trough sync.

```js
hoodie.store.connect()
hoodie.store.on('change', function(eventName, object, options) {
  if (options.remote) {
    console.log('new change from remote!');
  }
})

hoodie.store.add({})
// <nothing happens>
```

now let's imagine, that in the CouchDB database an object got deleted, you'd see in your console:
> new change from remote!