Simplify phase.py.

- Gets rid of clever but complicated deduping logic. Replaces it with
  dumb but simple deduping logic via a factory.

- Gets rid of a few methods that were either entirely unused or only used
  once (in which case replaced them with alternative code).

- Phases now store task names and types directly. The TaskRegistrar instance
  isn't retained after registration.

- A Phase now directly knows its depenendcies on other phases, instead of
  delegating to the union of dependencies of its TaskRegistrars.
  This makes a lot of code much simpler.

- Phase no longers uses the old 'goal' terminology.

- Move logic such as option parser setup from TaskRegistrar into Phase.

This simplifies Phase itself and a lot of code that uses it, and
paves the way for renaming Phase to Goal.

Testing Done:
CI passed: https://travis-ci.org/pantsbuild/pants/builds/32051833.

Unit and integration tests pass locally too.

Ran some manual builds, including "./pants goal goals --goals-graph".

Reviewed at https://rbcommons.com/s/twitter/r/856/