Allow arbitrary ordering of methods in the facet DSL block

Previously, calling `facet_filter` before other facet methods would fail.

Now, you can do this (notice the `facet_filter` comes first):

    facet "test" do
      facet_filter :range, published_on: { from: '2011-01-01', to: '2011-01-01' }
      histogram :myfield, interval: 70
    end

Closes #534.
[TEST] Sort result titles in `FilteredQueriesIntegrationTest`
[#540] Fixed incorrect index settings in `BulkIntegrationTest`

The "extract the routing value from documents" test in `BulkIntegrationTest`
was failing because the `bulk-test` index was created with only 1 shard,
so the filtering with the routing parameter couldn't work.

Fixes #537, closes #540.
Fix issues with Mongoid gem (incorrect JSON serialization of Moped::BSON::ObjectId)

To fix issues with the Mongoid gem, call `document.id.as_json` in the
`Tire::Index#get_id_from_document` method.

The culprit is the `yajl` JSON gem, when the compatibility mixin is required
(`require 'json/json_gem'`).

Closes #529.

Related: #535, #535.
[TEST] Added a test case for filtering results with multiple terms as `and`

See <http://www.elasticsearch.org/guide/reference/query-dsl/terms-filter.html>
Release 0.5.2
[DOC] Fixed the incorrect example of percolation while indexing document
[SETUP] Fixed the `rake web:update` Rake task
Added `Tire::Results::Collection#each_with_hit`

Previously, there was no convenient way to access the data returned by Elasticsearch
such as `_score` when the `:load` option was used.

This commit implements the `each_with_hit` method for results collection:

    results = Article.search 'One', :load => true

    results.each_with_hit do |result, hit|
      puts "#{result.title} (score: #{hit['_score']})"
    end

    => One (score: 0.300123)

The model instance is returned in the `result` variable,
the raw Hash from Elasticsearch in the `hit` variable.

Closes #562, closes #406.
[#562] Cleaned up the unit test suite for `each_with_hit`
[#562] Cleaned up and added integration tests for `Results::Collection#each_with_hit`
[#562] Cleaned up the documentation for `each_with_hit` in README
[#562] Refactored the `Results::Collection#each_with_hit` method

Previously, the method has been calling the `__hit` helper method
on each iteration pass.

With this patch, the `Array#zip` method is used to iterate over
the `results` and `@response['hits']['hits']` Arrays in tandem,
removing the need for the helper method.

Added simple method documentation as well.
Added support for passing partial document to `Index#update`

    Tire.index('articles-with-tags') do
      update( 'article', '1', :doc => { :title => 'One UPDATED' } )
    end

See <http://www.elasticsearch.org/guide/reference/api/update.html>

Requires Elasticsearch version [0.20](http://www.elasticsearch.org/download/2012/12/07/0.20.0.html) or higher.

Fixes #366.
Added `nested` query support

* Added the `nested` implementation for API/DSL
* Added unit and integration tests

Closes #475
Added examples of `nested` query support into `tire-dsl.rb`
[#475] Cleaned up and simplified the tests for `nested` query

* Fix whitespace errors
* Proper mapping in the `NestedQueryTest`
* Simpler queries in tests
* Better names for test cases, reorganize
* Remove redundant tests
[#475] Refactored the documentation for `nested` query in `tire-dsl.rb`
Release 0.5.3
[FIX] Escape single quotes in `to_curl` serialization

When your search query contains a single quote:

    s = Tire.search 'articles' do
      query do
        string "l'amour"
      end
    end

the `to_curl` command produces an invalid JSON payload:

    curl -X GET 'http://localhost:9200/articles/_search?pretty' -d '{
      "query":{
        "query_string":{
          "query":"l'amour"
        }
      }}'

With this patch, the single quote in the query is replaced with a Unicode escape sequence:

curl -X GET 'http://localhost:9200/articles/_search?pretty' -d '{
  "query":{
    "query_string":{
      "query":"l\u0027amour"
    }
  }}'

Closes #561