Added massive improvements to xls parsing.

Preview of changes. On my VM a 47 MB (16k rows x 10 cols) file now takes 3.6s on first pass, and 1.8 in subsequent passes to fully parse instead of 5 min+.

I added `:input_encoding` and `:output_encoding` as options to allow for encoding changes. If the excel file is UTF-16, instead of trying to detect this on every string in every file we instead just force the encoding if the binary representation is different than it's registered encoding. `:output_encoding` defaults to UTF-8. This doesn't work/apply to xlsx because of nokogiri restrictions/possible bug.

The only failing test is the result of nokogiri trying to apply an ascii regex to the clearly encoded utf16 spreadsheet. I might investigate a bug ticket back to nokogiri later for it.
`options` param?