migrate_config only complain about keys not from defaults

has_option seems to return true if a key is found from defaults even if it isn't overridden
in a given section (ours was complaining about 'confs' in a a mostly empty junit-run section).

This seems to fix it, though in the event a section was actually overriding a default,
just with the same value, it will ignore that. I couldn't figure out how to see if a section
actually defined a key without poking around in ConfigParser's private fields.

Reviewed at https://rbcommons.com/s/twitter/r/1451/
Gracefully handle another run creating latest link

Gracefully handle a race with another run creating or removing the latest link (which can happen with concurrent runs).

Testing Done:
Concurrent runs ~8µs apart.
https://travis-ci.org/pantsbuild/pants/builds/41989058

Bugs closed: 827

Reviewed at https://rbcommons.com/s/twitter/r/1396/
Refactor options bootstrapping.

Instead of free-floating functions, the bootstrapping is now
encapsulated in a bootstrapper class. This class exposes both the
bootstrap and full options.

This is necessary to support the startup sequence in pants_exe.py properly:

- To create full options we need the known scopes.
- To get the known scopes we need to load plugins and extensions.
- The plugin and extension registration code may use config.

Therefore we need a way to load the bootstrap config, then do some work,
then load the full options.

Currently we achieve this with a gross manual config-reading hack in pants_exe.py.
This change will allow us to get rid of that hack.

This change also fixes an issue where in tests the buildroot wasn't plumbed in
everywhere it should be.

Testing Done:
Unit tests pass. Integration tests pass.

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