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

Fixes #649 with the exception of the TODO above (and possibly a couple of other edge-cases I haven't identified yet) and there are no functional tests yet.

Other than that, I think this is at least solid enough for a PR now and the branch is getting pretty large as it is, so I'd like to get this reviewed and do a new branch for anything missing.
:headdesk: