Added support for const references

If a reference count is 0, then it will not be modified. This allows
const strings to be allocated entirely in read only memory. Because
the reference pointer is distinct from the actual struct pointers,
indirect vars such as tables and functions can have single const
instances.

Just make sure to never have more than 2,147,483,647 references to
a single object.
Removing float support and added proper types

Each var_t subtype:
 * num_t
 * str_t
 * tbl_t
 * fn_t
 * bfn_t
Changed structure of ranges to support an additional 16bit offset

Will cost an additional bitwise and operation any time a
table array is accessed, but will save memory when creating
ranges in the form `2..3`. Most importantly string slices of the
form `"hello"[2..3]` are now trivial to implement with zero
heap overhead in constant time.

Also added key and val specific "macros" in the form of inline
functions. May change the mess that is var.h to something similar
if I can figure out how to do the constant string allocation in an
inlined function. (gcc can optimize out __builtin_strlen so this
may just be possible. The inlining benifit may be significantly
platform dependent. Currently the `({ })` syntax used is gcc specific
so this is really no loss.)