Logging and performance improvements to the item-item builder

This set of changes does a few things:

- Improve item-item builder logging
- Allow sparsity to be disabled (the `@UseSparsity` parameter)
- Decrease memory allocation for sparsity (we iterate over all users' items with a `seen` set for deduplication, rather than building an RBTree)
- Make sparsity adaptive (if we have seen 75% of items, but still have 50% of users left to go, just use all the items)