Introduce TaskKey, SubSectionKey and FileKey

These immutable classes help clean up the code by reducing the number
of parameters we pass around and also automatically generating their
unique key.

This also supports the future enhancements like creating a cache to
avoid reloading config files and extending the support of
TaskExpressions to reference tasks from different files. TaskKey will
act as a key for caching mechanisms and also as an absolute pointer
to a task returned by a TaskExpression.

Change-Id: I68240462b4ce393f95765c3f0533df57e5939c7e
13 files changed