Cache results of virtual library searches. Incrementally update the caches. Use the caches when switching between VLs, and when evaluating the VLs for a book.

Some times using a 20,000 book library:
- Opening library: 17.8 seconds for trunk and virt_lib
- Setting a VL for the first time: 5 seconds trunk, 2.6 seconds virt_lib
- Setting a VL for the second time: 5 seconds trunk, .1 seconds virt_lib.

Adding custom column to show virt libs. Define 2 virt libs. Sort on this column  (worst case):
- start time increases from 17.8 seconds to 24.5 seconds, which is 2.6 secs per virt lib + 2 seconds to evaluate the template.
- Setting a VL for the first time: .1 seconds (cache is already built)