Refactor WhatChanged into base class, use LazySoruceMapper

Switch to using LazySourceMapper to map changed files to targets.
LazySourceMapper is designed to map sources to targets without
loading any more of the BUILD graph than is required, which is
ideal for a what-changed use-case.

Refactoring the what-changed calculation into base class should make
it easier to support other tasks that require the set of changed
targets (or files). The WhatChanged task itself is now just a small
stub on top of it.

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

./pants goal test tests/python/pants_test/tasks:what_changed

Bugs closed: 884

Reviewed at https://rbcommons.com/s/twitter/r/1534/
Sync of https://github.com/pantsbuild/pants/commit/991b6233b442369be2310ca58fbd7c4b93f72c89