Implement unit testing
Add skeleton of multi threaded version
Refactor OutputWriter to ResultWriter

Refactor the IOutputWriter to IResultWriter and introduce IResult to
store the result data.
Fix MSVC project dependencies
Use Boost

Utilize the Boost library to provide the multi-threading functionality.