Prefer to use app ports if available in an offer

Marathon currently selects random ports from the range offered by Mesos when launching a task. This PR first tries to select the app ports configured by the users, then falls back to random.

A future change could be to optionally reject an offer if the configured app ports are not available.
empty parens should only be used when a method is side-effecting