Major Rework of JobManager scheduling classes

The new design separates scheduler, instance manager, and execution graph cleanly.
  - Job graphs can be incrementally constructed
  - The execution graph is a slim asynchronous state machine
  - The scheduler picks instances and slots on demand and uses sharing groups / co-location constraints to implement resource sharing and co location
  - The management graph is removed, timestamps for state transitions are attached to the execution graph 


This pull request fixes also the following issues

 - FLINK-1094 (simplify input split assignment)
 - FLINK-1030 (Cleanly separate the Instance Management and Resource Assignment)
 - FLINK-1029 (Attach slot information to scheduling/assignment information in Scheduler)
 - FLINK-989 (improve not enough slots SchedulingException message)
 - FLINK-897 (Bug in scheduler for job graph instance sharing)
 - FLINK-820 (Support for unconnected data flows - runtime parts)
 - FLINK-625 (Add a fail(Exception) method to the job graph, to report problems detected in RPC calls)
 - FLINK-230 (Job Cancellation does not work properly: "Cannot find execution graph to job ID")
 - FLINK-165 (rework Nephele Task Hierarchy)
 - FLINK-79 (Startup time of jobs)
 - FLINK-15 (Rework Nephele Execution Graph State Machine)
 - FLINK-13 (Bug in Nephele Scheduler)