VM: refactoring that removes data_root_ranges

instead of storing data_root_ranges in data_roots, you can just store
cell pointers directly. the advantage with doing it that way is that
registration and traversal code becomes simpler (and slightly faster).
VM: refactor bignum.cpp so that GC_BIGNUM is never called on a NULL
pointer

The purpose of this fix is to ensure that no NULL checks are needed when
traversing the bignum_roots vector.
VM: rename all variables named "bignum" in bignum.cpp to "bn"

The name can cause compiler errors because it's the same as the type
name. It only matters in some functions, but I like consistency so I
renamed it everywhere.
VM: change type of bignum_roots and remove unnecessary not-null checks

Declaring bignum_roots to contain bignum** instead of cell avoids some
superfluous casts. Casting it to cell is wrong because the items in it
are never tagged. And due to a earlier commit, bignum_roots will never
contain NULL:s so checking for them is not needed.