Implement remaining TODOs

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