Snapshot API

Add snapshotting to the Chisel emulator API. Officially, this feature is still in beta, since more discussion is needed about the API is implemented and what the interface is.

Currently, this uses the default copy constructor to make module copies when a snapshot is requested, then uses a standard set_circuit_from() function to restore the circuit state. This preserves the same mod_t object and other fields (though the other fields are duplicated and stored, but not used in restore). A abstract clone() function has been added in mod_t, to allow polymorphic cloning. This makes mod_t non-instantiable (but directly using mod_t is probably a bad idea anyways).

Also updated the comments in emulator_api.h. Some API functions marked as BETA, meaning that they are subject to change without backwards compatibility - use with care.

Tests should pass, both chisel-tutorial and sbt test (no failures, nonzero number of skipped tests stays constant).