Ledger test

https://ripplelabs.atlassian.net/browse/RIPD-432

@JoelKatz @vinniefalco 

This is still somewhat of a WIP, but it is time to get the bulk of it onto develop, get some experience with it, and see where we go from there.
Each ledger entry stored in the account state ShaMap has an index, which is an
enduring identifier, that never changes from ledger to ledger. It's created by
hashing static elements.

For DirectoryNodes that enumerate available offers, the pays/gets Issue pair are
used to create this index. However, rather than dump all offers of a pair in
just the one DirectoryNode, the the last (right most) 64 bits has a quality
overlayed.

This is essentially TakerPays/TakerGets, i.e. how much you must put `in` of
TakerPays issue to get one of TakerGets issue `out`.

This allows easy walking of offers for a given Issue pair, with ever worse rates
for the taker, via using a `tree.findNextIndex(after)` api. To start with the
`bookbase` is used, which is the 192 bit common prefix, with zero in the last 64
bits.

In any case, getQuality simply gets the last (right most) 64 bits of a uint256
`index`.

It might be clearer if written like this:

```
uint256 ubig (
         "D2DC44E5DC189318DB36EF87D2104CDF0A0FE3A4B698BEEE"
         "55038D7EA4C68000");

expect (0x55038D7EA4C68000 == getQuality (uBig));
// FYI
expect (0x55038D7EA4C68000 == 6125895493223874560);
```