Improved DMD support

The changes here are mostly bug fixes. I also needed to add a workaround for the [DMD unary minus operator bug](http://d.puremagic.com/issues/show_bug.cgi?id=9304). The workaround probably makes `neg` and `nmsub` non-optimal, but those functions don't work without it when -O flag is used.