Requests/queries/etc currently have custom parsers, which make it more difficult to be certain that they are error free. We should replace all this hand parsing with some form of grammar, which defines exactly what syntax is allowed. This will also benefit those implementing clients, as they will have a grammar that can be interrogated programmatically.
Any unknown parameters should throw a parsing exception.
We can add custom rules where needed (eg to disallow certain combinations of parameters like using fuzzy in the multi_match query with type cross_fields).