[SEARCH] Added a more complex mapping definition and serialization for the Rubygem model

* Previously, only the `name`, `downloads` and `indexed` attributes were indexed,
  replicating the functionality of the current search feature.

* The `to_indexed_json` method was removed, relying on Tire's JSON serialization routines
  based on the model mapping definition.

* The `summary`, `description` and `author` gem properties were added, allowing much better
  search results _recall_, ie. allowing search in these fields as well and widening the search “net”.

* A gem which mentions "sinatra" in it's summary/description will now be matched (with a lower score):
  <http://localhost:3000/search?query=sinatra>.

* A gem written by Florian Hanke will now be matched: http://localhost:3000/search?query=florian+hanke

* The `version` gem property was added, allowing searches based on gem versions, for instance looking
  for Sinatra 1.3.2: <http://localhost:3000/search?query=name:sinatra+version:1.3.2>. For improved
  usability, the link from the result listing _should_ lead to the relevant version page,
  ie. http://localhost:3000/gems/sinatra/versions/1.3.2, not the last version.

* The `depends` and `uses` gem properties were added, which index runtime gem dependencies and all
  gem dependencies, respectively. It allows searches such as <http://localhost:3000/search?query=depends:rack>
  (for gems with depend on rack) or http://localhost:3000/search?query=uses:rack (for gems which use rack in
  one way or other).

* The `created_at` and `updated_at` gem properties were added, which allow to search gems updated in a specific
  period, for instance on August, 26th: <http://localhost:3000/search?query=updated_at:[2012-08-26+TO+2012-08-27]>

* The `author`, `created_at` and `updated_at` also allow for a _faceted navigation_ in the future, ie. searching
  for certain gem while restricting the result to certain author or time.

* These properties also allow for computing statistics on the Rubygem collection, such as displaying authors
  with most gems, or authors of the most downloaded gems, etc.

You have to reindex the elasticsearch index, to pick up the new mapping and index records properly:

    $ bundle exec rake environment tire:import CLASS='Rubygem' FORCE=1

See the following resources for information on previous efforts to implement a better Rubygems.org search:

* https://groups.google.com/forum/#!topic/gemcutter/xIzyTmFdXVo/discussion
* http://florianhanke.com/blog/2011/02/13/a-better-rubygems-search.html
* http://blog.websolr.com/post/3505941785/rubygems-search-upgrade-2
* http://blog.websolr.com/post/3505969969/rubygems-search-upgrade-3
[SEARCH] Added a more complex search query in the SearchesController#show method

Previously, we have been searching gems based on their names only.

With the new, more complex mapping defined in the preceding commit, we can add a more complex search query as well.

We're using a boolean query, keeping the original `phrase_prefix` text query and adding the most powerful
`query_string` query, which uses the Lucene query syntax (field specifation, boolean operators, wildcards,
fuzzy search, range and proximity searches, field grouping, etc).

See:

* http://www.elasticsearch.org/guide/reference/query-dsl/query-string-query.html
* http://lucene.apache.org/core/3_6_1/queryparsersyntax.html
[SEARCH] Added a `rescue_from` failed search requests due to incorrect query syntax

While we exposed the most powerful way of searching to the user (the Lucene query syntax),
it can quite easily lead to application errors when users enter incorrect queries, such as `bang!` or `foo[]`.

Since this is an error on the user's part, and not the application part, we should display a friendly
error explanation and give the user a chance to correct the query.
[SEARCH] Added a "user enters a search query with incorrect syntax" Cucumber scenario

Since the application uses Cucumber scenarios for validating its proper operation,
a scenario with user entering an incorrect search query ("bang!") has been added.
[SEARCH] Added the "Search Advanced" Cucumber feature

With the complex queries now available to users of the application, we should add
acceptance tests for the common scenarios.

We'll start with searching in summaries and descriptions (thanks to the `_all` field
automatically generated by elasticsearch).

Use this command to run all search features:

    $ bundle exec cucumber --tag @search

Use this command to run the "advanced search" feature:

    $ bundle exec cucumber features/search_advanced.feature
[SEARCH] Added a Cucumber scenario for searching in gem authors

    Given we now have a more complex search available
    When we search in the `author` field
    We should get some relevant results

* Added a "Searching in authors" scenario
* Added a step for creating more complex Rubygem records into the `gem_steps.rb` definition file

Use this command to run the scenario:

    $ bundle exec cucumber --name "Searching in authors" features/search_advanced.feature
[SEARCH] Refactored the search steps to a higher-level nested step "I search for ..."

Instead of repeating the low-level steps:

    When I go to the homepage
    And I fill in "query" with "<query>"
    And I press "Search"

over and over in our scenarios, we will abstract these steps to a single step:

    When I search for "<query>"

The obvious benefit is less code duplication and more readable steps.
[SEARCH] Added "search tips" sliding panel at the search results page

* Added a second form with `query` input, to duplicate the query for easier correction/change
  at the results page

* Added a HTML partial with concrete, interactive examples of queries possible with Lucene,
  hidden by default

* Added a link and JavaScript code to toggle the sliding panel with tips

* Added CSS styling for the new elements, added a "help.png" icon from the FamFamFam suite