erts: Make the gc compact {} to an immidiate

When doing a gc all 0-arity tuples are compacted to an immidiate. This
is useful because:
  1. it saves some memory.
  2. it guarantees that all boxed terms are atleast 2 words during a gc

Number 2 above is needed when we want to combine cons and boxed primary
tags into the same tag and therefore use the cons strategy for installing
forwarding pointers in the heap.

Ideally we want to always use the immidiate for 0-arity tuples, but this
turned out to be quite complex to achieve so for now we only compact at gc.
erts: Use same forward pointer strategy as cond for boxed

Instead of storing the forward pointer in the header work we store
THE_NONE_VALUE in the header and the forward pointer in the second
word.

This is necessary in order to merge cons and boxed terms to the same
primary tag.
erts: Merge cons and boxed tags into one primary tag

Freeing up one whole primary tag by moving cons pointers into the boxed
pointer. We diffirentiate inbetween cons and boxed by checking what if
the boxed pointer points to a header word or not. If it points to a header
(i.e. something starting with 00) we know that it is a boxed term, if it
points to anything else (i.e. 01,11,10) we know that it is a cons cell.
Start work on macrofying term switching
Attempt at macro x expansion
Revert "Attempt at macro x expansion"

This reverts commit a46ee2ecb81dec5145ff75db016ca31ad5e6b7d9.

Revert "Start work on macrofying term switching"

This reverts commit 2199ad03b51f953159fad3585e6d9edccce1515f.
erts: Use different tag scheme for 32 and 64 bit emu
Implement 64 bit special tag scheme