Implement closestPrecedingFinger, fix off-by-one errors in interval checks
Generate secret key for SHA256-HMAC using BouncyCastle
Add ability to change identifier generation algorithm from SHA256 to HMAC-SHA256
Initial performance test scripts
Print latencies from performance tests
Add more Chord unit tests, expand size of fingerTable
Add maven target to build jar
Merge remote-tracking branch 'alex/master'

Conflicts:
	src/edu/stanford/cs244b/chord/ChordNode.java
Extract ChordNode RPC methods into RemoteChordNodeI to support operations on remote nodes via RMI
Add server to registry. Need to enable user to set ports and pass in config. (incorporating Alex's change)

Conflicts:
	src/edu/stanford/cs244b/Shard.java
	src/edu/stanford/cs244b/chord/ChordNode.java
Create registry within local JVM. Join is working. (incorporating Alex's change)

Conflicts:
	src/edu/stanford/cs244b/chord/ChordNode.java
Read port configuration from DropWizard server, support running multiple shard instances on same machine
Fix remaining errors due to merge conflicts, check if joining localhost and same port as myself to determine if I should start new Chord ring
Extract ip address and port into separate Finger class since RMI call returns a proxy rather than the actual ChordNode; this causes a java.lang.ArrayStoreException in initFingerTable
Attempting to fix RMI ConnectionRefused when looking up other node
First attempt at automating running the system in multiple virtual machines
Check if java installed
Add automatic build and deploy to multiple VMs script
Fix directory structure, so packaged jar can run correctly
Update vagrant bootstrap script to fix package manager locking issue