Automatic Generation Of Highly Concurrent, Hierarchical And Heterogeneous Cache Coherence Protocols From Atomic Specifications