Switched to tagged pointers instead of indirect indexing

Now fbr_id_t is actually a pointer, but it contains generation id in
high-order 16 bits. This is possible due to the fact that only
low-order 48 bits are used for pointers on x86_64.

Probably this should work for x86 as well because it supports 64bit
numbers.

As of other problems... WIth some ifdefs the indirect indexing approach
may be returned back as a (slower) fallback solution that always works.