Fix some issues related to eigvals

- Pass arguments to `eigvals` to `eigvals!`, so that `eigvals(A, irange)` and `eigvals(A, vl, vu)` work as described in the docs
- Restrict `eigfact!`/`eigvals!` to real symmetric/Hermitian or complex Hermitian matrices. Previously we allowed these methods to be called on complex symmetric matrices, which did not give correct results.
- Allow `eigfact!`/`eigvals!` for generalized eigenproblem of Hermitian real matrices.
- Add some additional tests.

I may be exposing my ignorance, but I'm confused about the current division between Symmetric and Hermitian. Are there situations where a symmetric complex matrix makes sense? If not, it seems like ideally we'd define Symmetric as `typealias Symmetric{T<:Real} Hermitian{T}`, although this would break the constructor.