Added massive improvements to xls parsing. Tests pending.

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. 
 
Tests pending.
`if filename.is_a?(::String) && filename.start_with? 'stream:'` is a little cleaner.