Coding and Maintenance Strategies for Cloud Storage: Correlated Failures, Mobility and Architecture Awareness