Add lshw caching

As it turns out, lshw can take quite a long time. We were seeing it take
upwards of 1 minute per run. As we were using many dozens of disks, this
can clearly take a long time.  Therefore, cache lshw output and use the
cache when we can.