Use deep equality rather than string comparison.

This makes the tests a lot less brittle, since they don't
depend on the vagueries of json ordering
Add language to the SortScriptDescriptor.

This allows specifying the language when using a script sort.
Refactor sorts to inherit functionality from a base class.

This cleans up a lot of code and makes adding basic "all search" functionality
a lot easier.
Allow script/geo sorts to have NestedFilter and NestedPath

This is allowed by ElasticSearch as well. All sorts can have
a NestedFilter and NestedPath
Merge different work on Sorts together
Make SortBase and SortDescriptorBase abstract
Merge pull request #818 from johndaniels/refactor_sorts

Refactor sorts