bnet/cache: deferred pulling of data into cache

+ enables quicker refresh of data without pausing any requests
lib/bnet: separate out functionality of BNet specific functions and util

+ util.py should really be globally usable functions
lib/bnet/cache.py: rewrite cache to use global util function

+ prevents infinite loop bug of inifinite tasks!
+ naming task to prevent duplicates in the task queue (only want one refresh)