This builds on all other open patches. There's still more to fix in the SMARTS but these patches add a fair bit. It's probably best to apply other patches first and then see where it starts. Here's a summary of what has been added.
- nested recursion, previous SMARTS parser would only allow one level of recursive patterns. Extending the parsing to multiple matches actually makes it a lot simpler and is easier when we add component grouping / stereo.
- removes initialisation from recursive atom matches, these had to be set up separately but are now all done via a 'SMARTSInvariants' class. This was also need for the nest recursion to be clean.
- parse large ring numbers in SMARTS
- match component-level grouping, also meant an updated to the ConnectivityChecker. the component-level group is fundamental to SMIRKS... (maybe next weekend). the grouping also works in recursive patterns and fixes bug (#1312).
- match tetrahedral and geometric (double-bond) configurations in SMARTS. The matching is relative and tetrahedral chirality can use logical operators. the double-bond chemistry is more tricky, 'C/C=C/,\C' is technically valid but even DEPICTMATCH doesn't handle it correctly.