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.
`@cell_type[sheet] = {} unless @cell_type[sheet]` can be DRY'd up using `||=`
`@cell_type[sheet] ||= {}`. Likewise below.