Fix lock contention in fragment mgr.

The issue is that in the current code, the last reference to the
FragmentExecState is dropped when we remove the state from the
fragment exec state map. This is done when the global lock is taken.
Cleaning up the fragment exec state is not cheap and this causes bad
lock contention with high concurrency.

Change-Id: I7461e0ac5a034ba8da98183435f6cefa85c9d94e
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/5251
Reviewed-by: Henry Robinson <henry@cloudera.com>
Tested-by: jenkins