Add a templated TypedPreconditioner class. This sets the stage of preconditioners that can utilize different kinds of matrix layouts, just like the LinearSolver class hierarchy. Change-Id: I3579cf344bcd2eeeecb1ae621cab02a3c9a0f920