modify to support multiple grammars, add fmpxmllayout grammar

The approach taken was to convert the execute() method to route based on grammar and to move all of the parsing into grammar specific parsing methods. Also added an array property to validate that a supported grammar has been specified. fmxmlresult is the default, to support backward compatibility.
It should either throw an exception or return a default, such as `null`. Static analysis complains that the only return statements are inside control conditions that might not be met. This method is totally decoupled from the `getGrammar()` and shouldn't care about its internals, so it either needs to be able to return something or throw an exception.