Add payload.get_field_value() to fix KeyError from pants goal idea testprojects::

There are cases where we access a field on a payload that doesn't exist.

Rather than try to figure out when target.payload.excludes exists,
I added a method Payload.get_field_value() that directly access the
value and has the capability to return 'None' for a missing field.

```
./pants goal idea testprojects:: --print-exception-stacktrace
...

Exception caught:
  ...
  File "/Users/zundel/Src/pants/src/python/pants/backend/codegen/tasks/apache_thrift_gen.py", line 183, in createtarget
    return self._create_java_target(gentarget, dependees)
  File "/Users/zundel/Src/pants/src/python/pants/backend/codegen/tasks/apache_thrift_gen.py", line 201, in _create_java_target
    return self._inject_target(target, dependees, self.gen_java, 'java', create_target)
  File "/Users/zundel/Src/pants/src/python/pants/backend/codegen/tasks/apache_thrift_gen.py", line 223, in _inject_target
    tgt = create_target(files, deps)
  File "/Users/zundel/Src/pants/src/python/pants/backend/codegen/tasks/apache_thrift_gen.py", line 200, in create_target
    excludes=target.payload.excludes)
  File "/Users/zundel/Src/pants/src/python/pants/base/payload.py", line 98, in __getattr__
    field = self._fields[attr]

Exception message: 'excludes'
```

Testing Done:
Added unit test, CI passed.

Bugs closed: 659

Reviewed at https://rbcommons.com/s/twitter/r/1150/
Sync of https://github.com/pantsbuild/pants/commit/9087fdf1831330d7d9766cceb47ddd803665d76f