Add offer reservations to preemption flow

The reservation associates a slave id with a task id for a fixed duration.
If the task attempts to schedule itself during that time period and an offer
is available from that slave then it will be scheduled.
If another task attempts to schedule itself then it will not use the reserved offer.

Testing Done:
./gradlew clean build

Bugs closed: AURORA-11

Reviewed at https://reviews.apache.org/r/16232/