Consistent and Durable Data Structures for Non-Volatile Byte-Addressable Memory