Clients are now created and then connected to

client.client now has a connecter channel. This allows the ClientServer
to pass in channels connecting that client with an external (e.g.
websocket) system. We currently create a new client by first passing a
NEW_USER message into the ClientServer and then passing in the
connection details.

Unfortunately this creates a small data race, where the connection
details message could be picked up before the NEW_USER message (because
they come on different channels). To deal with this hazard when we
receive a message on the connecter channel we check to see if a user for
the message exists. If there a user exists, the connect message is
forwarded on immediately, otherwise we store it. Each time we create a
new user we must check to see if there are any outstanding connect
messages for it.

Now using msg.Message from the web browser through the server. Removed
client.ClientMessage. msg.Message now has json marked variable names.
Renamed USER and client to TRADER and trader

msg.NEW_USER is now msg.NEW_TRADER.

client.client is now client.trader.

client.ClientMaker is now client.TraderMaker.

client.clientState is now client.traderState.

client.clientComm is now client.traderComm.
Added WriteNewTrader(...) method to msg.Message
Fixed matched BUY defect.

When a BUY is matched it may not match at the price in the bid. If the
matched SELL is offering a lower rate the matching engine will match at
halfway between the two prices.

Previously we were subtracting the bid total price (price * amount) from
the available balance and then subtracting that same amount from the
current balance. In the case where the matched price was lower we would
see the current balance being higher than the available balance after
all outstanding trades were cleared. Now we add the bid total price back
onto the available balance and subtract the real total price from both
the available and current balances. Ensuring both values reflect the
same transaction.