Rewrite put_on_proc0/get_from_proc0 IceModelVec2S methods.

Also add IceModelVec2S::allocate_proc0_copy(), which allocates scatters
and work space the first time it is called for a given DM and re-uses
them for all IceModelVec2Ss using this DM.

To transfer a 2D field to processor 0 and back, do this:

IceModelVec2S field;
Vec field_p0;

field.create(...);
field.allocate_proc0_copy(field_p0);
field.put_on_proc0(field_p0);
// do work on processor 0
field.get_from_proc0(field_p0);
VecDestroy(&field_p0);