Convert to more efficient, unsemantic float position column

The goal is to update O(1) rows instead of O(N) rows,
where N is the length of the list, when we need to add
a single record to the top or move a single record up or down.

The strategy is to make the position column a gem-internal
field which can be negative and/or fractional.

A few things are still broken:
* We should try to make it harder for the user to accidentally
update the position column, which would now likely break things;
* Getting the next M higher items in the list doesn't work;
* It's theoretically possible to keep inserting items until the gap
in floating point values is so narrow that errors are introduced;
* We need to implement an alternative for bulk re-ordering of items in a
* list.