Make interpreter_cache a property, acquire lock in accessor.

Intended to address https://github.com/pantsbuild/pants/issues/819

Testing Done:
Locally repoduced the mentioned issue, applied patch and reattempted repro. Runs printed lock acquisition message and did not reproduce the issue.

CI: https://travis-ci.org/pantsbuild/pants/builds/41899735

Bugs closed: 819, 820

Reviewed at https://rbcommons.com/s/twitter/r/1392/
remove outer (pants_exe) lock and serialized cmd

All two subcalsses of command (eg GoalRunner and SetupPy) do not override `serialized` to return `True` and thus do not require the outer lock.
Removing it simplifies pants_exe and reduces the number of places we depend on dirutil.Lock and shutil.

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

Bugs closed: 817

Reviewed at https://rbcommons.com/s/twitter/r/1388/
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/