Fixes for 551 and 552

For issue #551, the `_extract_data_from_tsv()` function was modified to use an iterative readline strategy, rather than use `readlines()`. It also returns sparse data, rather than dense data. This saves a ton of RAM. The function can still handle input as a filestream object, or lists. As a result of this change, a test case in test_table.py had to be modified. It expected dense output, but has been changed to expect a list of `[row, col, val]`.

For issue #552, `json.load(fp)` was taking the entire file into RAM and not letting that memory go. This is an issue with the json package. To work around this, a simpler test was devised. Check for the first non-whitespace character in the file, and if it is `{`, then we can be very reasonably certain it is JSON and not TSV. This prevents both the memory block, and an undesirable spike in RAM usage even if the memory block were fixed.
Honestly, I was thinking the same thing. I did a search through the code before and header_mark isn't used anywhere. As for the negation of it, I changed it because I was confused  about its use. It is meant to be a specific hook to guarantee we have the header (probably intended for `#OTU ID`). I was confused, and thought it was logic in place to replace the `#` as the comment character, so we would want to have it following the same logic. I'll change it back. But if you want header_mark gone, just say the word.