Elementary operations for Tridiagonal and SymTridiagonal matrices

Fleshed out elementary +,-,x,\ operations on Tridiagonal and SymTridiagonal matrices

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.