Add support in Snap.Snaplet.Test for reusing initializers.

This allows for much more efficient testing libraries, as initializing can take a while, and if you want to run many tests, currently you have to pay that startup time for each runHandler/evalHandler.

The only question I had was whether to wrap InitializerState inside an opaque type (so it could only be used with the functions in this module). I didn't, but can make that change if it is preferred.