Use special container type for token balances
This PR implements an idea originally mentioned by @nathanhourt . His observation was that we use the asset type for two fundamentally different concepts, which is inherently dangerous.
A real-world analogy for the asset type could be, for example, a slip of paper reading "$ 1.00". The two fundamentally different concepts that match this type are, for example, a price tag in a supermarket on the one hand, and a bank note on the other. The important difference is that the bank note carries value, whereas the price tag only carries information. A consequence of this is, for example, that it is not possible to copy a bank note (or at least strictly forbidden), whereas it is perfectly ok to copy the price tag.
So, in order to model an equivalent for the "bank note" concept, this PR creates a new type stored_value. It employs RAII concepts, in the sense that it can only be moved around, not copied.
On top of that, this PR implements a simple bookkeeping concept: account balances cannot be created from nothing, nor can they be destroyed into nothing. Every creation or destruction of a balance must have a counterpart in another account. For this, a stored_debt type is introduced. Every token balance is issued by a stored_debt, and only a stored_debt can destroy (aka burn) balances. Instances of stored_debt and stored_value can only be destructed successfully if their contained amount is zero. This should ensure that no tokens are lost, and none can be created from nothing, as happened e. g. in #429.
Unfortunately, the beauty of the general concept is somewhat undermined by the way in which our database transaction system works. I. e. undo_db copies objects, and restores them upon rollback, by copying back the original value. Similarly, things are complicated by API calls returning copies of internal database objects.
This PR affects some API changes, i. e. the structure of certain database objects has changed slightly.
API incompatibilities are (mostly) resolved, tests working, replay working (up to 37M blocks anyway).