Added the isAtom property to substitutableSubpattern to more conveniently track whether parentheses are needed when the subpattern invocation occurs before repetition operators