WebSearch: SQPP rewrite, bugfixes, new tests
- Rewrite of SearchQueryParenthesisedParser.parse() and SearchQueryParenthesisedParser.logically_reduce() to eliminate some bugs found in the handling of deeply nested parenthesised expressions.
- Introduction of SQPP.nesting_depth_and_balance() to validate the balance of parentheses and give useful stats about them.