fix bounds checking failure message

casting the `uint` to an `int` can result in printing high values as
negative intege
fix overflow on bounds checks

Closes #9020
use element count in slices, not size in bytes

This allows the indexing bounds check or other comparisons against an
element length to avoid a multiplication by the size.
remove executable flag from source file
rename `base_and_len` -> `base_and_byte_len`
introduce `base_and_len` fns for element length
auto merge of #9885 : thestinger/rust/vector, r=brson

The goal here is to avoid requiring a division or multiplication to compare against the length. The bounds check previously used an incorrect micro-optimization to replace the division by a multiplication, but now neither is necessary *for slices*. Unique/managed vectors will have to do a division to get the length until they are reworked/replaced.