Make Address abstract and support constructing SyntheticAddresses from specs or path, name tuples.

Testing Done:
$ PANTS_DEV=1 ./pants goal test tests/python/pants_test:all

Bugs closed: 205

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