[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{Tv, Ti}`. `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.
I actually left it like this to make it really easy to port code from `sparsematrix.jl` (just deleting the `J` vector references). I think once things are ported over from there, it could easily be renamed to something more appropriate with a find and replace.