Expose protobuf underlying Transition if exists.

Many transitions (especially the kind used for Init and Cleanup) have an underlying protobuf object that knows how to e.g. serialise itself. Expose this where it exists.
Import SuperFastHash (3-clause BSD).

SuperFastHash is a hash function that outperforms FNV; it has been adopted by major projects like WebKit.
Provide __debug_only macro to suppress warnings.

When compiling in release mode, we will disregard some values that only exist to be assert()'ed on.
Trivial: whitespace.
Provide explicit init, cleanup descriptions.

Let each tesla_automaton provide explicit (but opaque) descriptions of its init and cleanup events. This is necessary if multiple automata are to share init/cleanup events, which we want to do so that we can stop kicking 100 automata every time we enter a system call.
Merge branch 'master' into explicit-init-cleanup
Extract lifetime into separate tesla_lifetime.

This type will be useful within libtesla as well, for tracking lifetimes that are shared by multiple automata.
Rename tesla_lifetime fields, typedef.

Change old ta_ prefix to tl_ and add a typedef tesla_lifetime for libtesla-internal code.
Let libtesla keep track of automata lifetimes.
Placeholder for "are we initialised" check.
Merge branch 'master' into explicit-init-cleanup
Split tesla_lifetime into (init,cleanup) events.

We will want to talk about the init and cleanup lifetime events separately, using the same opaque-representation technique.
Provide stub tesla_{enter,exit}_context().

These functions will be called instead of tesla_update_state when we are informing libtesla of context entry/exit events.
Call tesla_{enter,exit}_context().

These functions don't do anything yet, but we now call them correctly from instrumentation.
Merge branch 'master' into explicit-init-cleanup
Trivial: re-add merged-out newline.
Drop unnecessary debug dump() calls.
Merge branch 'master' into explicit-init-cleanup
Make the compiler enumerate (begin,end) pairs.

Reinstate the tesla_lifetime structure, but this time, let it be a simple combination of a begin and end tesla_lifetime_event.

Instead of keeping init- and cleanup-centric hash tables that point to possibly-partially-initialised initstate objects, simply keep a vector of tesla_lifetime objects that have been generated by the TESLA compiler parts.

Note: this commit updates libtesla but not the compiler parts!
Introduce "sunrise, sunset" names.

Init and cleanup events, in this new scheme, don't directly cause initialisation. What they do is signal the beginning of "waking hours" for automata.

This is an imperfect analogy; I'd be happy to discuss better names.