Add support for pinning/unpinning pages.

This feature enables a user module to tell HybridSim to never select
a certain page as a victim.  This feature is useful for tasks such as
forcing the Linux kernel address range to stay in the DRAM cache or to
keep important data for user mode computations in the cache (e.g. the
vector in a matrix-vector multiply operation).  The pinning operation
does not load the page into the cache if it is not already present,
but once it is loaded it cannot be removed until the unpin operation
occurs. To force the page into the cache, use a prefetch operation.

Note that this feature only allows up to SET_SIZE - 1 pages to be pinned
per cache set. This means pinning is impossible for a direct mapped cache.
For a 16-way cache, you can pin up to 15 pages per set. However, this
will reduce the concurrency available to that set since HybridSim can
only issue up to SET_SIZE - cur_set_pinned_count transactions to the
set in parallel.

It is also very important to note that this operation works with PHYSICAL
addresses, so if you are writing a program to generate the pinning
operations using virtual addresses, you will have to translate these
somehow before telling HybridSim to pin the page. In a real system,
this would be handled by the CPU itself as part of a special pinning
instruction.

To use this feature, call the HybridSim::mmio() method with operation 5
to pin and operation 6 to unpin. The address field is the page address
to pin/unpin.