Re-jig block layout algorithm

The block layout algorithm no longer attempts to layout the entire block and instead proceeds directly to word-by-word layout. This avoids a very slow text length calculation for blocks that are too large to fit in the text measurement cache (currently 128 bytes).
Fix bug in text measurement cache

When the hash table reached max occupancy, the eviction code would enter an infinite loop.
Change hash function used for text measurement cache

Previously, the hash used by the ELF file for symbol lookups was used. This was not very suitable and led to frequent collisions; the average lookup time in the cache was linear in the number of occupied buckets instead of constant. It has been replaced with the 32-bit variety of the FNV-1a hash and performance is (nearly) constant regardless of table occupancy.