use explicit enum type instead of with_type if available, also duplicate type before handling or-patterns to avoid unwanted monomorph binding (fixed issue #1794)

git-svn-id: http://haxe.googlecode.com/svn/trunk@6605 f16182fa-f095-11de-8f43-4547254af6c6