Fix to AIJCUSP to Enable larger parallel simulations with Ellpack Storage

The construction of the offdiagonal matrices has been changed to enforce
compressed row format. Before this commit, the entire CSR format of the
offdiagonal block matrices (used in MatMultAdd) was being used to convert
to ellpack. This lead to a huge amount of fill because many of the rows in
the offdiagonal blocks can often be empty. With this commit, I calculate
the compressed format and calculate the ellpack matrix from this form.
No change in test results.
Original commit by Paul Mullowney (augmented by PETSC_HAVE_CUSP include
guards by Karl Rupp):
Implementation of Sequential to Sequential VecScatters on the GPU.

In this commit, I've built a working prototype for sequential
to sequential vector scatters for CUSP vectors. I've also reorganized
the parallel to parallel vector scatters in a new infrastructure.

The design of the code is as follows. Currently, I distinguish
between PtoP (parallel to parallel) VecScatters and StoS (sequential
to sequential) VecScatters. In cuspvecimpl.h, a high level struct
called PetscCUSPIndices stores a void * pointer and enumerated type
describing whether the scatter is PtoP or StoS (and later PtoS and
perhaps StoP). The actual type of scatter information built
and stored in the void * pointer depends on the calling code.

For instance, in vscat.c, there are the methods VecScatterBegin_SGToSG,
VecScatterBegin_SGToSS, ... These methods build the indices for
the sequential scatter on demand via the function
VecScatterCUSPIndicesCreate_StoS.  Those indices are stored in
a struct of type _p_VecScatterCUSPIndices_StoS. the appropriate
data in that struct is filled depending on whether the input
and output are general or strided. Some additional meta data is
also stored.

A similar routine is called from vpscat.c for building the
PtoP vector scatter. The structure of this hasn't changed although
the constructing API method is now VecScatterCUSPIndicesCreate_PtoP
(it used to be PetscCUSPIndicesCreate).

A single destructor function is given for the PtoP and StoS scatters:
VecScatterCUSPIndicesDestroy. It used to be PetscCUSPIndicesDestroy.

I've made all of these methods PETSC_INTERN. I can't see any
reason to expose these methods to the user.

All of the source code for doing the sequential scatter computation
on the GPU is moved into a file vecscattercusp.cu (src/vec/vec/impls/seq/seqcusp).
I haven't moved the VecCUSPCopyToGPUSome and similar methods into
this file, although perhaps they belong there.

All scatter types implemented including FORWARD and REVERSE as well
as INSERT, ADD, MAX.
Adding a test for GPU Sequential to Sequential Vector Scatters

All vector Sequential to Sequential vector scatters tested in
this new example using SCATTER_FORWARD and ADD_VALUES for scatter
parameters. This includes all four combinations of sequential
general and sequential strided. Switching -vec_type between
cusp and seq yields the same results.
bugfix of PetscSubcommSetTypeGeneral() contributed by Stefano Zampini;
bug was introduced from change set c9e2ceb8fcb3755654977ac53cfa9c586c805089 :-(
DMPlex: use VECSTANDARD for coordinates
config: only define DATAFILESPATH for non-null value

Adding DATAFILESPATH to ones environment is a reasonable way to allow
the tests to run automatically.  This was suppressed by adding an empty
definition to $PETSC_ARCH/conf/petscvariables, requiring one to invoke
make with DATAFILESPATH=$DATAFILESPATH or some equivalent.  If we just
don't write empty values, the make variable inherits the environment.
So the priority is now:

  1. explicit parameter passed to make

  2. explicit DATAFILESPATH argument passed to configure

  3. other static locations like /home/petsc/datafiles that are searched
     at configure time (maybe these should be removed?)

  4. user's environment when invoking make
Merge branch 'jed/dmvecmattypes-stdcoords'

* jed/dmvecmattypes-stdcoords:
  DMPlex: use VECSTANDARD for coordinates
Merge branch 'jed/datafiles-inherit'

* jed/datafiles-inherit:
  config: only define DATAFILESPATH for non-null value
Merge branch 'jed/avoid-getpwuid' into maint

 The file path routines were broken because the current directory was
 placed in front of the given path before checking for leading ~ or
 ~user. This is now fixed, along with the removal of getpwuid (a
 liability on BG/Q and Cray). We still attempt to use getpwnam when
 encountering ~user.

* jed/avoid-getpwuid:
  Sys ex13: avoid non-portable realpath(1) in verification test
  cleanup includes that are no longer needed. Also remove check for _fullpath() as the corresponding code is removed.
  Sys: fix PetscGetFullPath expansion of ~ and ~user, ensure NULL termination
  Sys: avoid getpwuid in file path routines
  Sys: add failing test expanding ~/file-name and ~user/file-name

Conflicts:
	config/PETSc/Configure.py
Merge branch 'jed/options-insert-bcast-bgq' into maint

Attempt to work around BG/Q MPI_Bcast bug.  It is unknown whether it is
successful, but this uses fewer communications so it should not be
worse.

* jed/options-insert-bcast-bgq:
  PetscOptionsInsertFile: combine Bcasts for alias and values
Merge branch 'jed/fix-mat-sbaij-sor-prefetch' into maint

* jed/fix-mat-sbaij-sor-prefetch:
  Mat SBAIJ: avoid invalid memory read in MatSOR_SBAIJ
Merge branch 'barry/fix-dgmres.c' into maint

* barry/fix-dgmres.c:
  KSPDGMRES: fix conditional variable declarations
Merge branch 'jed/attribute-deprecated-compat' into maint

Fixes error encountered when using Intel compiler and changing gcc on
PATH between configuring PETSc and building an application.

* jed/attribute-deprecated-compat:
  config: avoid string argument to __attribute((deprecated))
Merge branch 'jed/fix-matop-enum' into maint

* jed/fix-matop-enum:
  Mat: add MATOP_ values for missing functions
Merge branch 'jed/fix-pcgamg-nearnullspace-corruption' into maint

* jed/fix-pcgamg-nearnullspace-corruption:
  PCGAMG: fix corruption for multiple solves when MatSetNearNullSpace is used
  PCGAMG: remove distracting comment
Merge branch 'jed/fix-restrict-cxx' into maint

== PETSC_ARCH must be reconfigured ==

Fix C/C++ choice for PETSC_RESTRICT and PETSC_STATIC_INLINE.

* jed/fix-restrict-cxx:
  config: define lang-specific macros in petscconf.h, choose in petscsys.h
Merge branch 'paulmullowney/cusp-vector-scatter-with-fix'

* paulmullowney/cusp-vector-scatter-with-fix:
  CUDA/CUSP: Implementation of Sequential to Sequential Vector Scatters
DMPlex: Fix overagressive checks
DMPlex ex1: Fixed test output
- Uniform refinement for quads changed
DMPlex ex7: Fixed test output
- Corrected orientations in interpolation