optimizer: use the equal? => eq? transformation to the optimizer phase

For some types, (equal? x y) is transformed into (eq? x y) in the resolve phase.
This commit adds this transformation to the optimizer phase. This improves
constant folding and enable some optimizations that are prevented
because equal? can run arbitrary code.

Also, transform   (eq? #f x) => (not x)   and   (eq? '() x) => (null? x)   to use
the type information of x when it's known.
ffi/unsafe: changed the way `ffi-lib` uses a version number with ".dll"

Add the version with a "-" before ".dll", instead of with a "."
after ".dll".