Better runloop

This PR address the underlying issue behind #765, which was that changes were batched too aggressively. It meant that doing `ractive.set()` (or `ractive.update()` or `array.push()` or whatever) inside an observer didn't take effect immediately, and promises resulting from those operations wouldn't resolve.

That made it very hard to do things like

```js
ractive.observe( 'foo', function ( foo ) {
  // we want this next line to change the dimensions of a <canvas>...
  ractive.set( 'paddingLeft', getPadding( foo ) );

  // ...but it doesn't, so `updateCanvas` will have out-of-date information
  // to work with
  updateCanvas();
});
```

That's now fixed. Along the way, a few oddly-named (and in some cases redundant) methods have been consolidated, tweaked and/or removed.