We cannot trust Java finalizers to run at appropriate time, if ever

Due to the small size of Java objects, compared to the underlying size
of Z3's trees, java objects are not necessarily collected in due time.
This causes implicit leaks that end up using the entire RAM before Java
moves a finger.

This alternative collects memory in a one-time pass-through, when
deleting a context. Some special usages of ScalaZ3 might thus suffer
from the change.
Make sure we check everything at compile-time, fix warnings