OVERTURE: Object-Oriented Parallel Adaptive Mesh Refinement for Serial and Parallel Environments