fixed typo in preprocessor directive

fixed a missing call to c_str() when using an older PETSc version

and another fix for supporting Ubuntus  embarassingly old PETSc

and another one of PETSc ver < 3.3
using _communicator.get() instead of libmesh::COMM_WORLD