I'll try to explain (to see if anyone else understands this).

The basic idea is that when we're counting resources (in this case, when a slave phones in to the master) we have some number of reserved resources and some number of unreserved, but the sum of those is **greater** than the total number of resources available. This is because we want to let (in our case) Hadoop use as much of the machine as it wants so long as nothing that gets reserved instances wants them. To that end, when we're adding up the number of resources that are used, and we encounter something using reserved resources, we also need to count it against the unreserved resources (which is why we create a new Resource and set it's role to unreserved). If we don't do this, we run the risk of saying there are more unreserved resources than we actually have.

#### Here's an example
```
total memory: 10G
reserved (say for marathon): 5G
unreserved: 10G
```

Call `slaveAdded` with a slave running 5G of marathon work. If we don't do this, the memory Mesos thinks it has is:
```
reserved (say for marathon): 5G - 5G = 0G
unreserved: 10G - 0G = 10G
```
and then Hadoop can come along and request all 10G, which overcommits the machine.

If we add a resources of equal value that's unreserved, then we get:
```
reserved (say for marathon): 5G - 5G = 0G
unreserved: 10G - 5G = 5G
```
which properly represents the state of affairs.