Improving Non-Volatile Memory Lifetime Through Temporal Wear-Limiting