Added unit tests for trader

Unit tests added:

Processing BUY, CANCEL, CANCELLED messages for an order.
Processing BUY, FULL messagese for an order, including the case where
the bid and match prices are different.
Processing BUY, PARTIAL messages for an order, including the case where
the bid and match prices are different.
Processing SELL, CANCEL, CANCELLED messages for an order.

As part of this we have produced a validate method for validating that a
trader is in a consistent state. A trader is in a consistent state iff:

1: The difference between the current balance and the available balance
(current - available) is the same as the total value of all outstanding
(not matched and not cancelled) BUY orders.

2: For every stock listed in 'stocks to sell' there exist outstanding
SELL orders summing to the quantity indicated, e.g. If 'stocks to sell'
indicates that the trader is selling 5 units of stock 1, then we expect
to see SELL orders for stock 1 whose quantity summs to 5.

We expect this validation criteria to expand in the future.
Added unit tests for stockManager

Basic set of tests covering:

Can sell stocks you own up the amount you have
Cannot sell stocks you own for a greater amount than you have
Cannot sell stocks you don't own

Submit sell and then cancel it
Submit sell, for less than amount owned, and cancel it

Submit sell and then complete it
Submit sell, for less than amount owned, and complete it

Complete buy for a stock not currently owned
Complete buy for a stock already owned

The newStockManager(...) function now takes the initial stocks as an
argument.
Added unit tests for trader

Processing SELL, FULL messagese for an order, including the case where
the offer and match prices are different.
Processing SELL, PARTIAL messages for an order, including the case where
the offer and match prices are different.

Also added a number of TODO comments about the code to record required
upcoming changes
response chan sending *client.Response not byte[]

Rather than marshalling the state of a trader into JSON as a byte[] we
are deep copying the trader's internal state and sending it in the
client.Response struct. This has several positive effects.

First we no longer need to have JSON friendly data-structures inside
trader. This allowed us to store stocks as a map[uint32]uint32 rather
than a map[string]uint32, removing a larget chunk of annoying strconv
code.

Second it makes the code much clearer. Previously the response was
returning a rather mysterious byte[] and you had to either read the code
that generated it, or rely on friendly comments to know what was
actually in that data.

Third and most importantly we allow different byte[] encodings to be
used without modifying the trader code.

This comes with the cost that we are constructing an intermediate
representation on every update of a trader.
Changed msg.Message.Amount/StockId to uint64

This means that every field in message, apart from Kind, TradeId and
TraderId, are uint64. This simplifies the code that deals with these
values. In particular this was motivated by the fact that the total
value of a BUY/SELL message is Amount * Price, previously Price was
uint64 and Amount uint32 making for awkward arithmetic.