Transactional Coherence & Consistency: Architectural Support for Practical Parallel Programming