First steps in pulling out Thrift remote:
 - Add Thrift definition & generated classes
 - Move page finding to remote
Merge branch 'master' into thrift
Add logback and SLF4J 1.7
 - SLF4J is included by Thrift
 - logback (or similar) is needed by SLF4J
 - logback 1.0.13 requires SLF4J 1.6 or newer
Rationalise POMs slightly
Add RunnerServer and tests to prove clients can connect
Rename remote -> executor
Add SLF4J 1.7.5 IDEA library xml
Add evil hack to get ExecutorServerTest passing more reliably
WIP Thrift refactoring:
 - Replace Class<?> with PageDefinition and Method with MethodDefinition
 - Move simple running commands into Thrift interface
 - Get (most of) Core unit tests passing again
WIP Thrift refactoring:
 - Move custom submit/traverser & instantiator to remote executor
WIP Thrift refactoring: Move after route invocation to remote executor
WIP Thrift refactoring: Move placeholder lifecycle hander creation to remote executor
Remove dependency from core on annotations
WIP Thrift refactoring: Reference method owning class by ID to avoid cycle
WIP Thrift refactoring: Fix most remote executor unit tests
WIP Thrift refactoring: Implement simple DriverWrapper delegation
WIP Thrift refactoring:
 - Remove need for coordinator to know crawl start point URLs
 - Change Thrift interface to startRoute() instead of visit()
WIP Thrift refactoring:
 - Start routes by page ID
 - Introduce ExecutorContext to encapsulate executor's current state
WIP Thrift refactoring:
 - Delegate ExecutorHandler to ExecutorContext
WIP Thrift refactoring:
 - Delegate traversing from ExecutorContext to PageTraverser