add logger module

1. add slf4j and log4j
2. use scala-logging to glue log functionality
add TimerService

A TimerService basically runs a user specified code for timeout event.
Typically, user passes a Runnable to a TimerService and optionally
a timeout, so that TimerService will run the code once timeout event
happens. In addition, TimerService provide a way for cancelation, if
user call reset before TimerService running the code, then TimerService
should reschedule the execution and wait for another timeout event.
add exception package
Add Communicator

A Communicator provides functionalities to communicate with other
peers. In YRaft, each server needs to send/receive message from/to
other peers, a communicator instance will be passed to RaftServer so
that it does not need to worry about the internal details to deal
with message sending/receiving.

Currently, a actor based communicator is implementated.
add Messages enum

Messages defines all possible message types in YRaft
Refactor RaftServer to make some methods public

1. Make some event handle method in RaftServer public
2. Remove main method from RaftServer
3. Implement ServerActor and finish a working demo in ActorMain
ignore *.log in .gitignore
remove constructor RaftSever(long)