First implementation for multi-threaded of samoa on local machine
1. The number of threads used in the main Engine is specified in samoa-local.properties
2. ParallelMasterProcessingItem creates multiple ParallelWorkerProcessingItem and pass ContentEvents to the worker
3. The workers are allocated to the threads (in the pool) in a way that a worker (and its processor) will be allocated to only one thread during the whole
process to ensure linearizability in the context of 1 Processor
Clean up some code
Some unit tests for Master, Worker PIs and ProcessingTask
Changes in run script (bin/samoa) to read from properties/options file
Use PriorityBlockingQueue for thread pool to preserve some order among execution of different processor and notify entrance processor (now only PrequentialSourceProcessor) when thread queue size is large