Tpetra: Added initialize() and finalize() functions.

By analogy with MPI_Init() and MPI_Finalize(), and the Kokkos functions
of the same names, these functions let users control initialization of
any "global" Tpetra-related things.  That lets users pass argc and argv
to MPI_Init() and Kokkos::initialize().  It also helps avoid issues like
premature Kokkos Node initialization causing Kokkos to get initialized
with the wrong parameters.

This commit also includes changes to Tpetra::MpiPlatform and
Tpetra::SerialPlatform.  These classes get new constructors that take
argc and argv, and pass them along to Tpetra::initialize().

NOTE TO SIERRA DEVELOPERS: This commit adds a new .cpp file to Tpetra:
Tpetra_MpiPlatform.cpp.  That file gets compiled unconditionally,
whether or not MPI is enabled, so you don't have to worry about
complications to your bjam files.

Build/Test Cases Summary
Enabled Packages: KokkosCore, KokkosContainers, KokkosCompat, KokkosLinAlg, KokkosMpiComm, Tpetra
0) MPI_DEBUG => passed: passed=73,notpassed=0 (3.22 min)
1) SERIAL_RELEASE => passed: passed=54,notpassed=0 (3.52 min)
2) MPI_RELEASE_KOKKOS_REFACTOR => passed: passed=76,notpassed=0 (6.08 min)
Complete cleanup of modification brackets

(From Sierra)

Build/Test Cases Summary
Enabled Packages: STKMesh
Disabled Packages: PyTrilinos,SEACASExo2mat,SEACASMat2exo,Optika,STKClassic
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=9,notpassed=0 (11.38 min)
3) SERIAL_RELEASE_SS => passed: passed=7,notpassed=0 (13.08 min)
Tests now use the new RectGrid.
MueLu: fixing easy tests for Mac

I'm not sure what's really going on, but hopefully this fixes them.
Kokkos: Using Cuda unified virtual memory can now be controlled as a
cmake option

Please enable Kokkos_ENABLE_Cuda_UVM in your cmake configure scripts.
This replaces adding KOKKOS_USE_UVM as a defined macro.  The macro has
been renamed to KOKKOS_USE_CUDA_UVM
Kokkos: When reduce or scan functor omits 'init' function then use placement new with default constructor.
Fix Tpetra CMakeList.txt to add Tpetra include path to Cuda builds.
MueLu: fixed binary matrix reading

We read it on a single processor, and only then redistribute.
MueLu: fixed scaling test nullspace for read in block systems

If a user provided a matrix for us to read, we always constructed a
single vector nullspace. Now we are being smarter, and construct the
nullspace of size set in the parameter list.

Couple things to notice:
- NullspaceFactory could do that for us, but unfortunately we are
  guaranteed to use it only for easy parameter list. For the factory
  parameter list, it is possible that NullspaceFactory is not a part of
  the dependency tree
- We cannot use A->GetFixedBlockSize(), as that is only set in
  HierarchyManager::SetupMatrix, which is called internall from the
  HierarchyManager::SetupHierarchy.
Introduce '#if defined(...)' guards around fenl/stokhos configuration options.
Fixing boundary conditions for the discrete gradient, which were corrupting
the coarse matrix for the (1,1)-block. Also, putting in 1-2-1 and 2-1-2
versions of the block preconditioner.
MueLu: another easy test update
Ifpack: Fixing IFPACK_RETURN issues.

Preventing stuff from being double called.  I thought we fixed this
a long time ago, but evidently we didn't fix it everywhere.

Props to Ray Tuminaro for the catch.

Build/Test Cases Summary
Enabled Packages: Ifpack
Enabled all Forward Packages
0) MPI_DEBUG => passed: passed=446,notpassed=0 (21.34 min)
1) SERIAL_RELEASE => passed: passed=412,notpassed=0 (7.83 min)