Practical Support For Strong, Serializability-Based Memory Consistency