Update solver.py to control the symmetry of the sparse matrix and Schur matrix
Added a symmetry option to the object constructor:
- False/0 -> general matrix (LU)
- True/1 -> symmetric (LDLT, not implemented so fall back to LU)
- 2 -> SPD (LLT)
By default, even when a symmetric factorization is used, a full S (L and U) is returned. To override and get only the L part of S, use schur(full_matrix=False)