Tpetra:  Enable faster multivector import/export for GPU node.

This commit substantially improves the performance of import/export of
multivectors using the KokkosClassic::ThrustGPUNode.  Currently import
and export of ThrustGPUNode multivectors copies the entire multivector
to the host, packs the import/export buffers on the host, unpacks the
communicated buffers on the host, and then copies the new multivector
back to the GPU.  This dramatically degrades performance in e.g., the
import from domain to column map and export from row to range map in
SpMv operations with a cost proportional to the vector size.

This commit fixes this problem by supplying kernels to pack and unpack
the buffers directly on the GPU.  Furthermore, if the MPI library
supports GPU RDMA, the packed bufferes can be communicated without ever
transfering them to the host.

This was implemented by supplying a new version of Tpetra::DistObject
(called DistObjectKA) that uses Kokkos::View to store the pack/unpack
buffers and uses Kokkos::parallel_for the pack/unpack operations.
Furthermore new versions of Distributor::doPosts() et al are provided
using Kokkos::View allowing the buffers to communicated directly via
RDMA or transfered to the host.

This has several implications for dependencies:
  * I put a number of helper functions in the Kokkos::Compat package.
    This package also manages the explicit instantiations necessary so
    that Tpetra doesn't need to be compiled by nvcc.
  * Tpetra now has optional dependencies on Kokkos::Core and
    Kokkos::Compat.
  * KokkosClassic has an optional dependency on Kokkos::Core so that the
    ThrustGPUNode can call Kokkos::Cuda::initialize().  Note that there
    is currently no automatic way of calling Kokkos::Cuda::finalize() as
    there is no reliable way to do this (putting it in the node
    destructor is a bad idea since the user is allowed to instantiate
    multiple nodes).  This is something that will have to be addressed
    as Kokkos::View is integrated throughout Tpetra.

All of this is optional and by default non of it is enabled (thus the
default behavior is expensive GPU import/export).  To turn this on you
need to enable:

 -D Trilinos_ENABLE_Kokkos=ON \
 -D Trilinos_ENABLE_KokkosCore=ON \
 -D Trilinos_ENABLE_KokkosClassic=ON \
 -D Trilinos_ENABLE_KokkosCompat=ON \
 -D Kokkos_ENABLE_Cuda:BOOL=ON \
 -D Tpetra_ENABLE_KokkosCore=ON \
 -D Tpetra_ENABLE_Kokkos_DistObject=ON \

This last option is the one that changes the base class of MultiVector
to DistObjectKA.  Additionally, if you want to enable RDMA, add

 -D Tpetra_ENABLE_MPI_CUDA_RDMA=ON \

Alternatively you can set "Enable MPI CUDA RDMA support" = true|false in
the Distributor parameter list to enable RDMA.  The default is the value
of Tpetra_ENABLE_MPI_CUDA_RDMA which defaults to OFF.

When turning all of this on, all of the Tpetra tests still pass.  The
only problem is Kokkos::Cuda::finalize() isn't called automatically,
creating a small heap leak.  I did not change any of the tests to call
finalize().
Muelu:  Add clone function to Muelu::TpetraOperator.
TrilinosCouplings:  Add GPU clone to IntrepidPoisson example.

This adds the ability to clone the linear system and solve it on the
GPU.  It works in parallel, and there is a new option
--gpu_ranks_per_node to specify the number of GPUs per node.  If there
are more MPI ranks per node than that, the rest run on the CPU.  To
support this, the code queries environment variables to determine the
local MPI rank on each node, which works for OpenMPI and MVAPICH.  For
other MPI libraries the user needs to specify the number of MPI ranks
per node via --ranks_per_node.  Additionally the user can specify an
offset for which CUDA device the rank is associated with via
--device_offset.  If there are n gpu ranks per node, local rank i is
associated with CUDA device i + device_offset for i=0,...,n-1.

With Jonathan's help, an xml file is also supplied suitable for calling
MueLu on the GPU.
Stokhos:  Fix building SpMv kernels performance test without Cuda.
Tpetra:  Fix build when KokkosCore is not enabled.

Build/Test Cases Summary
Enabled Packages: TrilinosFramework, KokkosClassic, Kokkos, KokkosCompat, MueLu, Stokhos, Tpetra, TrilinosCouplings
Enabled all Forward Packages
0) MPI_DEBUG => passed: passed=820,notpassed=0 (4.25 min)
1) SERIAL_RELEASE => passed: passed=761,notpassed=0 (3.03 min)
2) MPI_DEBUG_SS => passed: passed=862,notpassed=0 (3.49 min)
Other local commits for this build/test group: 2be935a, 75a6e33, a7419e4, 522cb7c
Tpetra:  Fix build error when Cuda is enabled but KokkosCore isn't.

Should fix nightly build error on zan.
Xpetra: Cloner: hopefully checking node type availability fixes the test
Kokkos: Fix cmake-make-install for Kokkos.
        Fix example to not generate a library.
MueLu: enable usage of external rebalancing factories in RebalanceBlockAcFactory

Now, we can call external factories to rebalance some user-specific data.
This can be used to rebalance e.g. additional maps, vectors...
MueLu: some clean up in header inclusions
MueLu: reconstruct strided maps in subblocks of rebalanced blocked operators
MueLu: bugfix in RepartitionInterface
MueLu: remove some debug output
MueLu: remove some debug output
MueLu: minor clean up
MueLu: mark problematic code in TentativePFactory

see trac ticket #193 for more details
Revert "MueLu: remove some debug output"

This reverts commit 42c6aa388c319cca33297b1c3558f94e8d3089d6.

The **ML MULTIPLY** line is currently the only indicator of whether we
use ML multiply or Epetra multiply for matrix-matrix multiplication.
They are not interchangeable yet, and there are some issues with Epetra
multiply which have not been resolved yet. We need this line to compare
outputs.
Kokkos: Xeon Phi cmake-make-install of Kokkos and build examples from the install on compton testbed.
IOSS: Eliminate memory allocation if reorder map not needed

(From Sierra)
IOSS: permit setting canonical name default back to previous value.

(From Sierra)

Build/Test Cases Summary
Enabled Packages: SEACASIoss
Disabled Packages: Panzer,PyTrilinos
Enabled all Forward Packages
0) MPI_DEBUG => Skipped configure, build, test due to no enabled packages! => Does not affect push readiness! (-1.00 min)
1) SERIAL_RELEASE => Skipped configure, build, test due to no enabled packages! => Does not affect push readiness! (-1.00 min)
2) MPI_DEBUG_SS => passed: passed=21,notpassed=0 (23.93 min)
3) SERIAL_RELEASE_SS => passed: passed=22,notpassed=0 (22.27 min)
Other local commits for this build/test group: 0756076