PyOP2: Framework for performance-portable parallel computations on unstructured meshes