Elementary operations for Tridiagonal and SymTridiagonal matrices

Fleshed out elementary +,-,x,\ operations on Tridiagonal and SymTridiagonal matrices as well as transpose(), conj() and ctranspose()

Where necessary (esp. in matrix multiply) the output type changes so that the output is still preserved gracefully. In particular where needed:
- SymTridiagonal is converted to Tridiagonal or dense
- Tridiagonal is converted to dense

Fixed apparent bug in copy(Symdiagonal)

Also some light cleanup of tridiag.jl

Replaces pull request #2608.