snappy version 3 - work in progress

Complete simplified rewrite of snappy.
Can't think of other reasons than it being customary. If it were possible to manipulate the object later on, it would of course be bad to have it deleted, but it should be fine in this case, as it should only be executed once before the callback is deleted deleted.

However, if someone were to change the code and add a HandleErrorCallback method they would have to add the delete statement there too, or it would start leaking. This would all be avoided by doing the cleanup in the destructor.

I'll see if I spot something else. Looks good in general, offering the same functionality with less code is usually better.