working on ExprSubstitute, seems general enough to do a lot.