Fix test simulations

The "move" and "split" test screens were attempting to set tile
elevations directly, which is no longer permitted.
Add metamorphic rock

Rocks deeper than 5km (~1500 bar) get squashed together into a
metamorphic layer.
Remove old import
Allow clicking on tile to show layers

Projections refactored from functions into classes with "project" and
"unproject" methods, allowing clicks to be translated into tile
indices for displaying the tile contents.

No unprojection logic for the "flat" projection type, since it's too
confusing to me.
Add default window size based on font metrics

I had always been testing with this, so might as well commit it.
Use dicts for tile substance

Getting away from pickling classes.
Factor out file operations

Simulation state saved as plain data. Should mean better backwards
save compatibility going forward.
Prevent some 0/0's

Stemming from 0-length GreatCircleArcs, which seems a little strange but
things break when I take them out and I don't feel like figuring out
why. In any case, this fixes some error log messages.
Remove widgets properly

Fixes segfault when popping a widget.
Replace generic igneous rocks

Instead of generic 'I' rocks, simulation places named igneous extrusive
types. Initial landmass has a randomly located center of felsic rocks,
away from which it grades down to mafic. The seafloor is always basalt.
Make sediment and metamorphism preserve attributes

Metamorphism now affects each layer independently, instead of mashing
them all together, so that each layer's attributes are preserved.

Sedimentary deposits mix the attributes of their source materials'
layers according to their contributions. This is sort of complicated,
since in a given step one tile can erode to multiple destinations and a
tile can accept deposits from multiple sources.

As an example of the former, a peak might be losing 0.1 km to neighbor A
and 0.2 km to neighbor B. If the source tile's top few layers look like

    0.05 km of 50% felsic igneous rock, on top of
    0.1 km of 75% felsic igneous rock with 5% iron content, and then
    > 0.15 km of 60% felsic metamorphic rock,

then both A and B will receive deposits that are

    63.33% (0.05*50% + 0.1*75% + 0.15*60%)/0.3 felsic with
    1.67% (0.1*5%)/0.3 iron content.

Likewise, when a given tile is receiving deposits from multiple sources,
the source layers are averaged together in the same way.
Show full selection layer attributes in tooltip
Factor out igneous and sedimentary rock

Rock definitions and sedimentation logic and tests moved to "rock"
module.
Factor out metamorphic transformation
Name sedimentary rocks

Grain size decreases as rocks are further eroded and re-deposited.
Name metamorphic rocks

Only zeolite and blueschist facies attainable until sources for high
temperature (besides depth) are available.
Add more metamorphic facies

The previous progression now is only used in the presence of subduction
(bringing temperature down). Also added a subduction view mode to see
which tiles are subducting at a given time.
Add intrusion and contact metamorphism

Subducting tiles randomly receive igneous intrusions, and the
surrounding rock above and below is altered by contact metamorphism.

Intrusive igneous rocks are more likely felsic; more mafic intrusions
rise less (due to greater density) and reach lower temperatures (higher
pressure lowers the melting point).