Added the `CI::Reporter` integration to tests

Generate JUnit compatible XML reports from the test runs when the `CI` environment variable is set.

See <https://github.com/nicksieger/ci_reporter>
[FIX] Properly set request body for GET requests when using Curb

This fixes a serious issue when sending GET requests to Curb transport backend.

Basically request body was discarded and not used at all. For example any search would yield default search - returning all docs.

Closes #3
Add missing .rb extension to the `elasticsearch-api/lib/elasticsearch-api.rb` file

Closes #2
[API][TEST] Updated the YAML test suite submodule
[API][TEST] Added a Rake task to update the Git submodule with the YAML specs
[DOC] Clarified and improved READMEs across libraries

Closes #4
Changed URL extraction in Elasticsearch::Client to allow more flexibility

Previously, it wasn't possible to fully configure the Elasticsearch endpoint URL, eg. to allow `https` protocol,
to pass HTTP Basic Auth credentials, or to configure a URL prexic without implementing a custom transport.

Now, any URL is handled automatically (using `URI.parse`):

    Elasticsearch::Client.new url: 'https://myserver:4430/search'

Code, tests and documentation have been updated accordingly.
Changed the URL-escape ("urlencode") behaviour in the `Utils` module

Previously, the `Elasticsearch::API::Utils.__escape` method was using `URI.encode`,
which escaped only characters, which shouldn't appear in URLs "naked".

This was inconsistent with other clients, and also made it cumbersome when trying
to eg. index a document with `type: "mynamespace/model" -- as is common in Rails applications.

With this change, `__escape` uses `CGI.escape` -- or `EscapeUtils.escape_url` when available --
to perform a *full* URL-encoding of the passed in argument.

`__pathify` has been changed to not perform any escaping, and `__listify` was changed
to escape all list items separately.

Related: #7
Changed the behaviour of URL-escaping across the API modules

Based on changes in the previous commit, updated the logic within
API modules to perform "urlencode" consistently, and updated
the test suite to reflect the behaviour.

Closes #7
[FIX] Removed variables duplicated in commit 9f65017
[API] Changed, that the `get_template` API doesn't require :name argument anymore

Related:

  * elasticsearch/elasticsearch#2532
  * elasticsearch/elasticsearch#3812
  * elasticsearch/elasticsearch-rest-api-spec@4efda5d1806019c195005d72f299d7b13047b81c
[API] Improved the output of the YAML test runner

Display the test filename in verbose (default) mode.
[API] Added support for source filtering across the API

Related:

* elasticsearch/elasticsearch#1413
* elasticsearch/elasticsearch#2951
* elasticsearch/elasticsearch#3301
[API] Added missing documentation for the `get_source` API
[API] Added `Utils.__validate_and_extract_params` to encapsulate parameter whitelisting/extraction/verification

    __validate_and_extract_params { :foo => 'qux' }, [:foo, :bar]
    # => { :foo => 'qux' }

    __validate_and_extract_params { :foo => 'qux', :bam => 'mux' }, [:foo, :bar]
    # ArgumentError: "URL parameter 'bam' is not supported"
[API] Changed, that API parameters are not only whitelisted, but verified

Previously, valid parameters for each API were extracted from the arguments Hash,
and the rest was silently discarded.

This could lead to hard to debug behaviour or hideous bugs due to typos. To prevent this,
the arguments Hash is compared to a list of valid keys. When an invalid key is being
passed to an API, `ArgumentError` exception is raised.

For example:

    client.search :search_type => 'count', :qwertypoiuy => 'asdflkjhg'
    # => ArgumentError: URL parameter 'qwertypoiuy' is not supported

Furthermore, consistency with the Python and PHP clients in this regard is achieved.
[API] Release 0.4.1
[TRN] Release 0.4.1
[GEM] Release 0.4.1
[EXT] Relax dependency to "elasticsearch" in .gemspec