create a Properties.Expander

The Properties class does a lot at once, and has become very difficult
to follow and understand. Reduce some of its logic by abstracting out
property String expansion which is used both to expand properties
recursively with themselves, and Task and NamesFactory Fields, into a
generic, single purpose, no policy, string expansion class to make the
intent clearer. More code could be moved to the Expander later, however
this change attempts to make the biggest improvement with the least
amount of code churn.

Change-Id: Ic97cf57cf739695e7ed80d35908af0e11bfd0b61
1 file changed