Fix default implicit substitutor
Add implicit substitutor override tests
Make Substitutor immutable