Change query to support new interfaces

The sound file is passed into query and back out to the module via new methods (if supported). The purpose of this is to allow modules to re-recognise speech with custom language models or recognisers.

Also checkValid can return userData (an arbitrary object) which is then passed to respond, to avoid having to recompute information.