A software framework for massively parallel, block-structured adaptive mesh refinement (AMR) applications