remove the slow scalar reinterpret that used a 1-element array

improve box() to catch size mismatches with pointer types

fix an issue in box() with a non-leaf-type; it would incorrectly
create an object reference, leading to a segfault. ideally,
allocate_box_dynamic should do a run-time check for non-leaf types if
it might be necessary, but for now just check isbits() in reinterpret.

fixes #7697