CsvParser is now interface. CsvParser -> SimpleCsvParser.  Tests all passing.

Pulled footloosejava's CsvParser in as MultiLineCsvParser, but not yet refactored
to impl the CsvParser interface and no tests/supporting code pulled in for it yet.

Note: CsvParser#parse returns String[].  This should probably be changed to List<String>,
but that requires changing all unit tests, so using String[] for now.
Refactored constants and some methods from SimpleCsvParser into ParserUtil.
MultiLineCsvParser impls CsvParser. CsvParserBuilder now supports it

for cases where multiLine or allowDoubleEscapedQuotes is asked for (these
are new methods on the CsvParserBuilder).
Brought in MultiLineCsvParserTest.  All passing.

Changed all to call parse(), not parseNthRecord or parseFirstRecord.
Also removed IOException from parse(String s) and all of the tests
that call it.
Added parseNext(Reader) to CsvParser intf. SimpleCsvParser now compliant.

CsvReader from footloosejava merged in and uses CsvParser#parseNext(Reader).
All tests passing.
Removed the old parseLine method from SimpleCsvParser.
Moved more common functionality out of parsers and into ParserUtil.
Added test to MultiLineParser to clarify rfc4180 double quote policy compliance
Added MultiLine tests checking settings with "rfc4180" setting.

Moved ParserUtil tests out of SimpleCsvParserInternals test to new
ParerUtilTest.  Added a few new tests to CsvReader that use MultiLine.
Converted CsvParser#parse to return List<String>, not String[]

All unit tests updated and passing.
Fully converted codebase over to List<String> rather than String[].

All tests updated and passing.
Modified parse logic in MultLineParser based on footloosejava's feedback.

Feedback here: https://github.com/quux00/simplecsv/pull/5#issuecomment-44115072
Changed SimpleCsvParser to version that had best benchmarks.

Added threadSafe switch to CsvParserBuilder and check for inconsistency
between threadSafe or allowDoubledEscapeQuotes and multiLine(false)
(being explicitly set to false).  Unit test for the builder added.
Removed unused parseFirstRecord and parseFirst methods from MultiLineCsvParser
MultiLineCsvParser should needed a test for when an empty String is passed to parser.parser(string).
The result should eb an immediate EOF from the StringReader, which should correspond to a null being returned

Test added:

  @Test
  public void returnNullWhenEmptyPassedIn() {
    assertNull(parser.parse(""));
  }

Test passed.
SimpleCsvParser should also have a test for when an empty String is passed to parser.parse(string).
The result should be the same as if the reader encountered an immediate EOF, which should correspond to a null being returned. Same behaviour as MultiLineCsv parser.

Test added and Failed:

  @Test
  public void returnNullWhenEmptyPassedIn() {
    assertNull(parser.parse(""));
  }


Changed the parse method to test for empty String. The parse0 method unchanged since it is used properly by parseNext and does not require the same check.

@Override
  public List<String> parse(String ln) {
    if (ln == null || ln.isEmpty()) {
      return null;
    }
    return parse0(ln);
  }
Revert "SimpleCsvParser should also have a test for when an empty String is passed to parser.parse(string). The result should be the same as if the reader encountered an immediate EOF, which should correspond to a null being returned. Same behaviour as MultiLineCsv parser."

This reverts commit 90fd0bd3f44d450683c30f56b97351460e4510ef.
SimpleCsvParser should also have a test for when an empty String is passed to parser.parse(string).
The result should be the same as if the reader encountered an immediate EOF, which should correspond to a null being returned. Same behaviour as MultiLineCsv parser.

Test added and Failed:

  @Test
  public void returnNullWhenEmptyPassedIn() {
    assertNull(parser.parse(""));
  }


Changed the parse method to test for empty String. The parse0 method unchanged since it is used properly by parseNext and does not require the same check.

@Override
  public List<String> parse(String ln) {
    if (ln == null || ln.isEmpty()) {
      return null;
    }
    return parse0(ln);
  }
Test added in this commit was missed in last commit:

  @Test
  public void returnNullWhenEmptyPassedIn() {
    assertNull(parser.parse(""));
  }
Changed qualifier for entering processing of doubleEscapedQuotes to make sure that already not in escape state.

This: 

if (allowsDoubledEscapedQuotes && state.inQuotes) {
...
}

Changed to:

if (allowsDoubledEscapedQuotes && !state.inEscape && state.inQuotes) {
...
}