Provide a type-safe replacement for `BtcAmount` and `FiatAmount`

As reported in issue #141, class `FiatAmount` is not as robust as it
could be. The instances of different currencies share the same class,
what requires continuous checks to verify we are not mixing different
currencies inappropriately.

This change proposes a new replacement for `FiatAmount` and `BtcAmount`
which uses a type-safe mechanism that makes impossible to mix amounts
of different currencies.
Merge pull request #144 from apoloval/issue/141

Provide a type-safe replacement for `BtcAmount` and `FiatAmount`
Use OrderSet instead of Order as protocol message

Orders should be sent as a complete set to simplify the consensus of
the broker set. This means that `Order` is no longer a protocol message.
Consequently, modify actors to use `OrderSet` instead of `Order`.

Also, remove `OrderCancellation` message. The way to cancel an order is to send a new order set without that given order.

And finally, the introduction of `OrderSet` triggered a redesign of the `Position` class, that become templated (e.g. `Position[Bid.type]`), allowing the removal of several runtime checks in `OrderBook` and `OrderMap`.
Merge pull request #145 from sortega/feature/orders

Use OrderSet instead of Order as protocol message
Add integration testing for open orders
Merge pull request #147 from sortega/feature/146_orders

Add integration testing for open orders
Introduce OrderSet.addOrder
Make OrderSubmissionActor manage a set of orders
Enable integration test
Feedback changes
Introduce ProtocolConstants.orderResubmitInterval
Send orders to the broker grouped by market
Merge pull request #148 from sortega/feature/146_orders

Feature/146 orders
Introduce new IT for order cancellation
Merge pull request #149 from sortega/feature/it

Introduce new IT for order cancellation
Fix heisenbug at OrdersActorTest
Merge pull request #150 from sortega/bugfix/heisenbug

Fix heisenbug at OrdersActorTest
Provide a more convenient interface to `Currency` classes

* Move operators from `Currency#Amount` into `CurrencyAmount` trait.
That makes possible to use such operators with the more abstract
type if needed.
* Add convenience `apply()` functions to `Currency` trait to instantiate
amounts in a less verbose way.
* Add a marking trait `FiatCurrency` to deal with fiat currencies.
The Java representation is moved exclusively for instances of this
trait.
* Add a `FiatCurrency.apply()` function to obtain a currency from a
`java.util.Currency` instance.
* Add utility functions to `Currency.Bitcoin` to convert from/to
Satoshi amounts.
Partial replacement of `BtcAmount` and `FiatAmount` by `CurrencyAmount`

In some parts of the codebase, the usage of `BtcAmount` and `FiatAmount`
is replaced by generic class `CurrencyAmount`.
Addressing feedback from PR #151