Non hard-coded commodities

This is probably ready for a bit of testing in a branch.

Note: will currently break Mac build because the `OOCommodities.m` and `OOCommodityMarket.m` files aren't in the XCode project.

## Features:

- Looks pretty much like 1.80 without OXPs (a few quantities and prices are slightly different because the new algorithm can't deliberately use overflow)
- prices not restricted to multiples of 0.4 up to 102.0
- per-station and per-trade good buy/sell limits
- secondary stations can optionally mark smugglers as offenders
- import and export legality can be changed by OXP either generally or per-station for each good
- able to add extra goods by OXP (F8 now scrollable if necessary)
- best import/export prices no longer only at RI/PA pairs for OXP goods
- trade-good scripts for more customisable setting of quantity, price, legality, etc. per-good, per-station and/or per-system
- sorting and filtering on F8 screen
- legality information on F8 screen
- hermit markets now reflect their clients
- extra (mostly OXP) information on goods on F8 F8 screen (GUI_SCREEN_MARKETINFO)
- F8 F8 screen can buy/sell/change good
- "full" buy/sell will stop at the total contracted volume for a good (repeat to carry on)

Loads 1.80 savegames fine as far as I can tell, though doesn't produce savegames that 1.80 will read properly.

## OXP compatibility:

- Old stations will get a default "no trade" market rather than attempting to parse `commodities.plist`. Whether this is worth fixing depends on how many station OXPs get updated before 1.82
- OXPs which change `illegal-goods.plist` will find that no longer works. That's only New Cargoes, so far as I know, and anyway, the documentation did warn against doing that.
- OXPs expecting a fixed commodity list are probably okay in that the names haven't changed - but the non-canonical names (e.g. `liquorWines` rather than `liquor_wines`) aren't supported
- JS commodity properties from the old pricing algorithm no longer exist
- Obviously OXPs making assumptions about the number, price, name, etc. of cargo are going to be more-or-less broken.
- Cargo contracts should survive the transition, though the JS side of that script needed some updating.
- Uses new properties and plists, rather than changing meaning of existing ones, so a single OXP which defines the correct properties for both this and 1.80 is possible.