Redesigning Data Structures for Non-Volatile Byte-Addressable Memory