Simplify sync machine.

1. Rename `machine.synced` etc methods to `machine.whenSynced`. This describes what methods do better. Also, methods will be companions to `isSynced` etc.
2. State change event will no longer receive “this” as second arg. Not sure why this was needed.
3. `synced`, `unsynced`, `syncing`, `unsynced` events will no longer receive “this” and current event name as args. Current event name in this case is superfluous.
4. `context` can no longer be passed to `when#{method}` methods as second arg. Use `_.bind` or `=>` for consistency.

Before:

```coffeescript
model.synced => console.log 'Model is synced'
model.on 'syncStateChange', (model, eventName) =>
  console.log 'Model', model, 'had event', eventName
model.on 'synced', (model, eventName) =>
  console.log 'Model', model, 'was synced'
```

After:

```coffeescript
model.whenSynced => console.log 'Model is synced'
model.on 'syncStateChange', (eventName) =>
  console.log 'Model', model, 'had event', eventName
model.on 'synced', =>
  console.log 'Model', model, 'was synced'
```