Refactor SubstitutionContext

- Reorder methods so public interface is more clear
- Make methods private
- Don't allow substitute to be changed
Only Strings and Regexps are substitutable
Clarify substitution methods intent.