cluster: clean up lib/cluster.js

Clean up and DRY the cluster source code. Fix a few bugs while we're
here:

* Calling cluster.Worker(env) in a non-constructor context would create
  the Worker object but lost the env argument.

* Short-lived handles in long-lived worker processes were never
  reclaimed, resulting in resource leaks.

* Handles in the master process are now closed when the last worker
  that holds a reference to them quits. Previously, they were only
  closed at cluster shutdown.

* The cluster object no longer exposes functions/properties that are
  only valid in the 'other' process, e.g. cluster.fork() is no longer
  exported in worker processes.

So much goodness and still manages to reduce the line count from 590
to 316.

Suggested reviewer: @indutny because he will dig it the most. The diff is kind of noisy, a side-by-side diff may work better.