FEATURE: Region based base coverage histogram
A new switch -r "region-json" is now supported

By giving the program a parameter -r "region-json", the base coverage
calculator will then be able to detect "region jump" within a sampling
region, and will not count those "after jump" reads that will cause the
pileup engine to see a giant hole.

two programming facility have also been introduced: Logging and Testing

LOGGING: The macro "LOGS" is defined to std::cerr when the project is
compiled in debug mode, and an ostream that will silently absorb all
messages when the project is compiled in release mode. Logging
statements in the code can then be written as

LOGS << (any thing you would normally pipe to std::cerr) << std::endl;

When compiled in debug mode, the message will be written to standard
error, and when compiled in release mode, the message will simply
disappear. This kind of code is much easier to read since they flow
better with the rest of the code, than the alternative

\#ifdef DEBUG
  (logging code)
\#endif

TESTING: It would be overkill to have the project depend on some full
blown unit testing framework, but occasionally some testing is desired.
Thus a new folder "test" is included into the project tree. All the c++
source file in the folder will be compiled into a binary, so they should
all have main function. Moreover, the return code of the main function
determines the success/failure of the test.

Currently, very simple build system is implemented for the test subdir,
which depends on all the object files being already compiled in the
project folder. So the suggested way of running the tests is as follows:

1. write tests as .cc file in test/
2. "make clean && make" to build the project
3. "make -C test clean all" to build and run the test cases

Also notice that the test compilation is not including the precompiled
header file by default, so any header inclusion should be done manually.
Merge branch 'yq-develop'