test: add unit tests for JSONSource

This patch introduces unit tests for JSONSource or Mupd8Source in general.

The general requirement for a source reader:
- hasNext() should return true when there's next item in the source
- hasNext() should not consume items from the source
- hasNext() should return false when there's no item in the source
- getNextDataPair() should return the next item in the source
- getNextDataPair() should throw NoSuchElementException if no next item

Some behavioral changes
source-reader: modify source reader behavior to match test requirement

This patch changes the source reader at interface level and concrete implementation level to accommodate the requirement specified in the JSONSOurceTest (See commit zheguang/mupd8@c665ef2c2ae8d69a485310b90dd4b1dae04431b5)
source-reader: refactor and code-change for Scala idioms

This patch refactors the JSONSource to increase readability. Also, the usage of null is changed to Option to favor Scala idioms.
source-reader: bugfix reader destruction

This patch destroys reader as soon as buffered-reader does not have next line.
source-reader: add interface javadoc and remove redundant method in JSONSource

This patch adds documentation to Mupd8Source interface to specifiy behaviors on the highest level.
JSONSource.readLine() is removed due to redundancy--readLine(int) with default parameter value is used.
source-reader-test: use BeforeAndAfterEach to replace deprecated BeforeAndAfter

According to http://doc.scalatest.org/1.0/org/scalatest/BeforeAndAfterEach.html, the usage of BeforeAndAfter is deprecated in favor of BeforeAndAfterEach and BeforeAndAfterAll, which tend to be clearer on the mutability of test fixture.
source-reader-test: move fixture resource to BeforeEach

File creation is moved to BeforeEach such that each test method gets independent test resource.
source-reader-test: remove throw clause on RTE add test coverge to hasNext

Throw clause on NoSuchElementException from getNextDataPair is unecessary since NSEE is a RuntimeException.

New test coverage to hasNext is to make sure hasNext *always* returns false and should not fail when there's no item in the source. For example,
Given fooSource having only one record, 'foo',

fooSource.hasNext()         // Should return true
fooSource.getNextDataPair() // Should return 'foo'
fooSource.hasNext()         // Should return false
fooSource.hasNext()         // Should return false
...
fooSource.hasNext()         // Should return false
source-reader: rewrite destroyReader for better readability

Use if-block instead of flatMap to increase readability.
Merge branch 'pull-request-source-reader' of https://github.com/zheguang/mupd8 into zheguang-pull-request-source-reader

Conflicts:
	src/main/scala/com/walmartlabs/mupd8/Mupd8Main.scala