Support pluggable default substitution providers

Allow defining how ${foo} expressions are evaluated in @Default. Still defaults to system property lookup, but when commands are created a DefaultsContext may be provided which changes the lookup behavior.