Abstracted Currency to inteface

It is useful for implementing own currencies different from fiat currency table (virtualcoins and such). In general this could be taken further as IUnit and library renamed to *int with decimal places and unit* but this should suffice for now.

Use case: Let there be a market where fiat and virtual currencies can be traded. You wouldn't want to put them all into one table cause they might have conflicts and wouldn't prefer to prefix them either because that would lead to ugly currency codes which would have to be translated and so on and on. Solution is to create another table with only virtual currencies.

BC: Exchanger implementations must update getRate from Currency to ICurrency.

Notice: For full support user must override default currency type implementation with his own.

*Wolf has full stomach and currency stays final.*