Added a purity class for actions so that the ActionPhrase can decide whether to invalidate the caches.  (untested)
Added source, target, and validator to ProsePhrase value parsing.  This is necessary so we can dynamically parse the value.  This eliminated the substitution bug which was caused by the argument names being words in the pattern but only ids in the value.  Dynamic parsing properly turned these into words so they were identified as the same as the arguments.