no need to safe the length on the impersonator
two promotes in the begin continuation
test and fix for unsafe vector ops

unsafe primitive argument types are always *precise* classes (not
subclasses), otherwise they aren't cheaper at all than actually doing
the check. Therefore, for the non-* variant we can't actually make them
unsafe in the vector arguments, since we anyway need to check for
impersonators