Initial support for downloading additional details for a person in
 the pedigree view, as we zoom in.
Add support for caching pedigree and fanchart info on the client.
 When we display fewer generations, there is nothing new to download.
 When we display more generations, we only download the new data, and
 merge with the data we already have in memory, in particular
 preserving the detail information for the events of a person.
Stop reducing the boxes after a given generation, otherwise the tree
 does not look like it's growing.
Various optimization to speed up display of pedigree and fanchart:
 traverse the list of known persons directly, rather than iterate on
 sosa numbers and check if that person is known.
Avoid an extra useless draw initially.
Redo the Compact pedigree layout algorithm, so that now it is possible
 to display 50 generations in 200ms, instead of failing before at around
 21 generations.
Redo the Expanded pedigree layout to make it shorter, and limit the
 maximum number of generations since the tree becomes rapidly too high
 to be useful anyway.
Speed up the fanchart by changing the traversal of persons.
 This takes advantage of the sparse data, so we should not traverse
 all generations and then all persons, most of them won't exist. In
 javascript, this is much slower than traversing the list of known
 persons.
The fanchart can now easily display 50 generations of a typical
 genealogy, ie lots of unknown persons in later generations.