Fig compatibility layer 649

TODO deal with port edge cases, e.g. just container port specified, or IP and port specified on host
See http://www.fig.sh/yml.html
Issues have been raised for this missing functionality, which is not yet supported by Flocker.

Fixes #649
1. Unless you're talking about something that will be used as a Python identifier (e.g. with `getattr`) you should never use `str` as a type in Python 2; Python 3 makes it too ambiguous. Use either `bytes` or `unicode` as applicable. In this case it should be `unicode` across the board since that's what YAML contains.
2. All the string literals in this module, or at least those used as keys, should be Unicode: `u"image"` or whatever. `from __future__ import unicode_literals` is your friend.
3. We should presume the YAML parser always returns unicode, and if it doesn't and we have to workaround that file an issue about it and reference the bug. Returning mixture of bytes and unicode is a terrible misfeature that we should not rely on.