add an ets backend and rafter_backend behaviour

This commit incorporates the following changes:

Improvements
 * Separate Read and Write Path
   * Read path is linearizable, but doesn't require logging operations
   * Uses successful next tick of append_entries as an implicit quorum
 * ETS Backend
 * Backends can maintain their internal state now
 * Statem test for ETS Backend
 * script to start a node for development purposes

Bugfixes
  * uses noops to advance commitIndex
  * explicitly handle timeouts in rafter_consensus_fsm

Libraries
  * Removed eper from rebar.config
Merge pull request #13 from andrewjstone/feature/backend-behaviour

add an ets backend and rafter_backend behaviour
fix dialyzer target in Makefile
remove rafter:get_state/1
fix dialyzer errors
Merge pull request #15 from andrewjstone/bugfix/dialyzer

Bugfix/dialyzer
fix small inconsistencies in README.md
node name is peer1
Merge pull request #17 from curiousleo/bugfix/readme

Small inconsistencies in README.md
Fix test startup and ets backend badmatch

 * A bunch of apps need to be started for lager to work. Use the new
   application:ensure_all_started/1 call to have rafter start it's
   dependencies automatically.

 * While fixing dialyzer warnings I introduced a regression in
   rafter_backend_ets. This commit fixes that.
fix rafter startup for tests
Merge pull request #18 from andrewjstone/bugfix/quorum_min_even_servers

fix rafter startup for tests
Change quorum_min/3 to quorum_max/3

* Ensure rafter_config:quorum_max/3 supports even numbers of servers
* Make the code a bit clearer hopefully
* Add some comments
Merge pull request #19 from andrewjstone/bugfix/quorum_min_even_servers

Change quorum_min/3 to quorum_max/3
add catchall to rafter_backend_ets:[read/2,write/2]
Merge pull request #20 from andrewjstone/bugfix/ets-ignore-bad-ops

add catchall to rafter_backend_ets:[read/2,write/2]
Merge pull request #1 from andrewjstone/master

pull from upstream