Integrating Computer Architecture and Coding Theory to Advance Emerging Memory Technologies