Add geometry as a concept native to idata.

This is necessary for performance, but it also helps uniformity by
isolating the idata user from the geometry format of the server.
The server could communicate using GeoJSON, but it could also
be something else, and this change isolates you from that detail.

The reason this change is necessary for performance is because
parsing geometry formats is a relatively slow operation, and if
you need to iterate over all the geometry in a table, you don't
want to pay the cost of parsing the geometry every time, when
you could parse it once at load time.

This change also opens the door to use a spatial index in a very
similar manner to the way we already support dictionary indexes
on arbitrary fields.

The documentation is now stale.