Improved Container Allocation in the YARN Runtime

currently we are having random problem with allocating evaluators of different memory size, especially when the requested evaluators' sizes are not requested in ascending memory-size order.

this PR is to tighten up our container allocation logic.

The scenarios with different requesting orders that have been tested (<1, 512MB> means request of 1 evaluator of 512MB):
```
1)	<1, 512 MB >  <1, 2048 MB >
2)	<1, 2048 MB >  <1, 512 MB >
3)	<2, 512 MB >  <1, 2048 MB >
4)	<2, 2048 MB >  <1, 512 MB >
5)	<1, 2048 MB >  <2, 512 MB >
6)	<1, 2048 MB >  <1, 1024 MB >  <1, 2048 MB>
7)	<1, 1024 MB >  <1, 2048 MB > <1, 1024 MB >
```
I am not sure about using "*" for HostName. We can experiment this later, but for now I think we should not change things that we do not understand fully just because. 

As a general comment, this CR is more for bug-fixing purpose, it is by no means the final solution. We should spend more time to understand YARN protocol and implications of special parameters (such as using "*" for rack) to have a solution that we can feel confident about.