Adds custom list and dict option types.

Values (in cmd-line args, env vars and config files) must be JSON lists/objects.

Currently our config reader 'parses' list and dict values using python 'eval', so we
change all of those in our pants.ini to be valid JSON. Fortunately they remain valid
eval-able python too. Eventually we'll get rid of that eval-ing code, but for now
we need to support both, during the transition.

Adds checks in migrate_config.py for list/dict values that aren't valid JSON.

Note that the list type is different from action='append'. The latter
appends cmd-line arg values to the default. The former replaces the
default.

Testing Done:
CI passes.

Reviewed at https://rbcommons.com/s/twitter/r/1389/
Subclasses of Exception have strange deserialization

We pass these back from subprocs so they need to ser/de correctly, but Exception has special
deserialization. UnreadableArtifact is basically just a sentinel value so subclassing Exception
just adds complexity.

Testing Done:
https://travis-ci.org/pantsbuild/pants/builds/41981675

Bugs closed: 826

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