Maintain and use offer/slave PID state

I've replicated the same behaviour as the C++ scheduler implemention here which means the following;

- Offers, Slaves and their PIDs are stored in memory until tasks are launched
- Framework messages are sent to slaves where possible
- Rescinded offers are removed from the in-memory map
Merge branch 'fix/slave-pids-error' into wip-branches