Add a wrapper around PetscViewer.
Use pism::Viewer.
Reduce the number of public methods of IceGrid.

...by moving more stuff into IceGrid::allocate(), which will one day
become the constructor of IceGrid.
Fix PIO::inq_grid().
We don't need Petsc{Abs,Min,Max}.

C++ STL provides std::min() and std::max(), C standard library has
fabs().
More work on IceGrid.
IceGrid::Mz -> IceGrid::m_Mz; add a getter method.
IceGrid::L[xyz] -> IceGrid::m_L[xyz]; add getters.
IceGrid::zlevels -> m_zlevels; add z(), in_null_strip() shouldn't be a member.
IceGrid::[xy]0 -> IceGrid::m_[xy]0; add getters.
IceGrid::dz{MIN,MAX} -> IceGrid::dz_min(), IceGrid::dz_max().
Hide IceGrid::{rank,size}; remove PetscInt from IceGrid.hh.
Automatic type conversion pism::Viewer -> PetscViewer.
Remove Unit::is_valid(). (A Unit is always valid).
IceGrid::radius() -> radius() (does not need to be a method).
IceGrid::periodicity -> m_periodicity; add a getter.