PCBDDC: create local solvers once. Reuse them during repeated linear solves

Destroy routines moved outside ResetSolvers routine.
PCBDDC: move setup of local solvers into a routine into bddcprivate.c

PCBDDCSetUseExactDirichlet moved accordingly
PCBDDC: better management of local matrices among repeated solves
PCBDDC: Setup of local matrices moved into a separate routine into bddcprivate.c
PCBDDC: use a boolean memory instead of scalar one to compute local scatters
PCBDDC: Move setup of local scatters into a routine
PCBDDC: protect code for mirrors by graph size.

These are invalid reads in multilevel
Merge branch 'stefano_zampini/pcbddc-multipleconstraintsbugfix' into stefano_zampini/pcbddc-improvelocalsolvers
PCBDDC: allow computation of number of vertices/constraints in GetPrimal functions without actually computing their local indices
PCBDDC: Move work vector creation to a separate routine

Now the VecType/comm of R vecs are inferred from that of vec1_N
PCBDDC: move stack variables of PCBDDCCoarseSetUp to protected block
PCBDDC: Move creation of work vector on constraints
Merge remote-tracking branch 'origin/master' into stefano_zampini/pcbddc-mirrorsfix
Merge remote-tracking branch 'origin/master' into stefano_zampini/pcbddc-improvelocalsolvers
Merge branch 'stefano_zampini/pcbddc-constraintssetupimproved' into stefano_zampini/pcbddc-improvelocalsolvers
PCBDDC: move creation of parallel work vectors used in presolve/postsolve.

Destruction demanded to PCDestroy_BDDC
PCBDDC: Move setup of data structures for substructure correction and coarse basis assembly into a separate routine
PCBDDC: improved code for local corrections and coarse basis functions setup

No new functionalities have been introduced with the commit.

Main changes are:
- VecType is now inferred by the type of the PCIS working vector vec1_N
- Working mat M1 now computed using MatMatSolve
- Use of PetscMemcpy whenever possible
- Replacing "VecGetArray/set values directly into array" by VecSetValues/VecAssembly calls
- Use of VecGetArrayRead instead of VecGetArray
- Optimized use of stacked variables
- Small changes in order to adhere to developers guidelines
PCBDDC: change name of function for setup of local correction and coarse basis functions
PCBDDC: is_R_local is now a member of bddc private struct