constructor () {
    if (this.constructor === AbstractCommand) {
      throw new Error('This is an abstract class that you must extend.')
    }
  }
AbstractCommand is the abstract base class for objects that can be run in the CommandRunner.

The simplest implementaion of this class is a command that does nothing. Let's call it the `Noop` command.

```js
export class Noop extends AbstractCommand {
  run () {
    return Promise.resolve()
  }
}
```

All you need to do to extend this class is implement a new `run` method.

This method should return a **cancellable** promise.
I recommend using bluebird for this. See the AbstractCommand tests for examples.

If you need to implement your own specific cancel logic you can overwrite the `.cancel` method.

There are two protected methods that you shouldn't touch used by the CommandRunner to run your command.
@abstract