Implementation of a cache model.

Here's my implementation of the cache model. The key Byfl flags are:
-bf-cache-model: Turn on the cache modeling infrastructure.
-bf-line-size: Define the number of bytes per cache line. Defaults to 64.
-bf-dump-cache: Dump out cache statistics to some files. These files are necessary to get access counts from the bf-parse-cache-dump script.
-bf-max-set-bits: Log base 2 of the number of sets to model. All sets up to this number are modeled, so we can choose one after simulation depending on the actual cache we want to get numbers for.

The bf-parse-cache-dump script that is distributed along with the Byfl compiler scripts (bf-gcc, etc.) is used to tabulate the number of accesses to each level of a memory hierarchy. It can handle an arbitrarily deep hierarchy of varying sizes and associativities, as well as a shared L3 cache. See the help for how to use it.