Convert to actual type instead of just converting to string
Previously, the ElasticSearch backend converted all values to strings when creating documents or queries
This commit changes this so now the ElasticSearch backend infers the type by calling .get_internal_type() on the field.
This, for example, makes IntegerFields get stored as integers and DateTimeFields get stored as dates.
To help with implementing this, I created another class called ElasticSearchField. This class helps with finding the type of the field and handling the conversion
This solves a problem where range lookups (gt, lt, etc) wouldn't work properly when used on integers/dates (as these were converted to strings previously)
For callable fields, you can now add a .search_type attribute to the function to specify a type
The ElasticSearch backend will also no longer attempt to index FileFileds