Requests for `array(...)` or `arrays(...)` through HTTP and XRootD now start asynchronous downloads of all the basket data before starting to read, decompress, and interpret. This keeps the network busy prefetching while the CPU is preoccupied, hiding latency. The HTTP preloader is implemented with `concurrent.futures.ThreadPoolExecutor` (not selected by default in Python 2, as that would require a non-standard library dependency), and the XRootD preloader is implemented with a pyxrootd callback. The `threads` parameter is a number of threads for HTTP and a boolean for XRootD: yes-parallelize or no-don't, because we don't control how many threads pyxrootd uses. (PR 242)
Binder now uses JupyterLab, rather than Jupyter Notebook. (PR 244)