Modified table to simply implementation

rather than handling entitiy arrays individually, a table contains
a single stride parameter which indicates the table is in one of
3 states.

stride 0:
Table contains two offsets representing the range of keys
and range of values. This can represent ranges in constant time

stride 1:
Table contains one offset and an array of values for a range of
keys with stored values. This can be used as an n-indexed array.

stride 2:
Table contains single array of key value pairs. Implements a fully
function hashtable which acts as the main data structure.

Here is the current layout:
 stride 0              stride 1              stride 2
[       ref       ]   [       ref       ]   [       ref       ]
[   tbl tail    |c]   [   tbl tail    |c]   [   tbl tail    |c]
[        |  len   ]   [  nils  |  len   ]   [  nils  |  len   ]
[       mask      ]   [       mask      ]   [       mask      ]
[  koff  | stride ]   [  koff  | stride ]   [        | stride ]
[  voff  |        ]   [      array      ]   [      array      ]
Rewrote table source code in hopes of cleaning it up

Split the insert and assign functions based on nil/val insertion
and added some helper functions to hopefully make the functions
less massive.

Removed key offset for ranges/lists. The offset causes issues when
evolving into a full table and didn't seem useful enough to keep.