Enabled creating Hamiltonian matrices from other Hamiltonians

Previously, `Hamiltonian.fromsp` would only parse `scipy.sparse.csr_matrix`
objects. This was limiting the functionality.

Now, all sparse matrices can be converted through any `fromsp` matrices.
When the passed object is a SparseGeometry it will decide whether
it is orthogonal or not. Otherwise, a user can manually specify
the `orthogonal` argument.

The method will automatically remove any overlap parts (if passed
as the matrix), and will automatically extract the overlap parts
if a matrix has been passed in ``S=``.
