When parsing invalid ELF data with ranges larger than actual file size, CachedReader would
eagerly allocate a buffer to land the read of that huge size even though the read would later fail.
This could cause unbounded vec allocations.
CachedReader now seeks to find the actual stream lengthh at the beginning and validates read requests
against that.
Also, add fuzz testing for some basic ElfStream interfaces (that's what caught this bug).
Also, rustfmt the fuzz targets.