Major refactor of error handling and API

I realize that this is a very big change and understand if you don't want to merge it, just tell and I will publish my own module.

The issues that I found is:
* If a request fails an error is throw in another tick, that makes it very difficult to catch
* Some error are strings (http://www.devthought.com/2011/12/22/a-string-is-not-an-error/)
* The callback is not the last argument, that is generally considered an antipattern in node.
* The API lacks separation between the YQL parameters and request options
* The internal logic do not handle error reports, this is not always a bad thing but something I would normally expect from a pure client.
* The callback do not have an error argument, this is also an antipattern in node.