[WIP] SparseVector support + tests

Addresses #6479

Definitely not ready yet, but there's been some chatter, so I figured I'd push what I've been working on. I'm kind of adding to it here and there (since there's a lot to do), but if anyone else wants to help push this along, I'd appreciate the help.

Also a question, I'm not sure I quite understand the use of the two type parameters for `SparseMatrixCSC{Ti, Tv}`. `Tv` is obvious, but what does `Ti` really do as opposed to just using a consistent `Int32` or `Int64` vector. Is it really a space conservation option? I'm sure there's a good reason that I'm not aware of.