emit events on resize, restart, quit, quitHard

In order for other cleanup work to be done, fire events
on the tick prior to performing the work.

Return emitter from clusterMaster constructor.

Also provide getter clusterMaster.emitter() which returns the
same emitter.

Emit events when clusterMaster methods (resize, restart, quit,
or quitHard) are invoked.

The event is emitted to allow additional cleanup in your code
on the tick prior to the method being invoked.

```javascript
// listen to events to additional cleanup or shutdown
clusterMaster.emitter()
  .on('resize', function (clusterSize) { })
  .on('restart', function () { })
  .on('quit', function () { })
  .on('quitHard', function () { });
```

Also make sure repl commands and signal listeners do the same.

Add quitHard to repl since it was missing.