There actually isn't a circular dependency here.  `data` now depends on everything, `compute` depends on `expr` and `expr` is pure.  I chose this arrangement because `data` depends on `dynd` which is currently our most exotic/hard-to-install dependency, and I wanted to keep this somewhat isolated.

The imports are here rather than at top because I expect us to want to move this block of code around with its imports.  I want it to be very clear that this is why these imports are here.   When/if it goes, they should go.