Refactor faction set up in multiplayer.

The code has been improved to switch from index lookups to lookups by
ids. This makes the implementation more flexible for future improvements
and easier for maintenance.

The "Custom" faction has been added. It is automatically chosen and
locked for sides with a recruit list. The sides without recruit list
won't see it in their faction choice combo box.

The recruit list in side will be now be overriden by a faction if map
settings are not in use.
Initial step for splitting mp::connect into gui and engine.