Always assert operand types, print the unit on failure

Summary: There's a rare crash happening when we translate SetM with the wrong
types.  This diff doesn't actually help that, but it will catch some errors and
print useful messages.  Especially with control flow it's pretty hard to look
at x86 and figure out what went wrong.

Reviewed By: @edwinsmith

Differential Revision: D1494270