Update free-range management to keep free ranges sorted by size and address.
This was needed because sorting by address ended up being very slow to find free spaces in large programs. E.g., if 100,000 1-byte free ranges were created (and, likely unusable), placing every instruction after this point will need to search thouse 100,000 free ranges.