AMReX: a framework for block-structured adaptive mesh refinement