Detect dynamic module imports better

Previously, when building a dynamic module it was possible for the
compiler to forget what kind of module it was importing and try a static
import of a dynamic module, causing a runtime error. This commit fixes
that behaviour.
Add missing parameter to DBC dialect

Using the "assert" or "assume" methods of the DBC dialect would cause a
runtime error because exceptions were raised with no message; this
commit specifies a message for these exceptions.
# COMMIT MESSAGE FORMAT ERRORS:
# 3. There is only a subject and no body.
# Erase all non-comment lines to abort the commit.
Retain fresh methods inside other JS fresh methods

Previously, in JavaScript, when a fresh method was located inside
another fresh method the last element of the body (the return value)
would be lost for the inheritance case, because it was removed in-place
to be compiled separately. Only nested fresh methods evinced this
behaviour as in any other case the method body would never be used
again. This commit restores the last element of the body as soon as the
body of the fresh method has been compiled.
Make math module be correctly GC-rooted in C

math_module was initialised to 0, not the module object, so it was
regenerated repeatedly.
Import sniff dialect changes from Tiled Grace

The dialect more accurately tests intersection of circles and includes a
new "hue()saturation()lightness" method.
Add audio support to Sniff dialect

Two new methods, playSound and stopSound, give the ability to play any
audio file the browser supports.