A scalable software framework for solving PDEs on distributed octree meshes using finite element methods