Implement remaining TODOs from #150

* cache array types
* Use NoMem for loads so we don't impart an unnecessary ordering on loads