Fixup RoundManager scheduling for phases that depend on themselves.

Handle this case explicitly and add test coverage for the
RoundEngine.

This also adds proper cli phase de-duping and validation
that requested data products actually have a producer.

Testing Done:
$ PANTS_DEV=1 ./pants goal clean-all
$ PANTS_DEV=1 ./pants goal test {src,tests}/{java,scala,python}::

Bugs closed: 324

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