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.
This was a fun little problem. The issue is that in order to support iterating through both lists and file objects, I needed to use the `for line in lines` loop on 3801. But, the default behaviour on file objects is to read in chunks, so you can't use `tell()` within a `for line in file` loop. It will always give you the position at the end of the chunk, rather than at the end of the current line. This would result in the `seek()` being inaccurate, and it would end up (silently) missing pieces of lines. So instead, we remember the line number (list_index), which happens to be nice and consistent if we are looking at a file or a list. It's just a bit ugly because now instead of "seeking" we have to manually go through the lines until we hit the start of the data.