Rearrange MatrixTypes
Created by: youngmit
A single module contains all of the different MatrixType implementations (native, ptesc, trilinos, etc), which makes maintaining the individual implementations difficult. This also falls short of providing proper abstraction of the Matrix and Vector concepts, since client code needs to select the appropriate concrete type (and make sure that its enabled).
I recommend first splitting the different implementations into separate modules/files, USEing them in the top-level MatrixTypes module, and provide an abstract factory for allocating and initializing Matrix and Vector pointers of appropriate types. This should cut down on and centralize #ifdef guards, and provide better abstraction