Switch from using datatype.str[2:] to datatype.itemsize

This couples us less heavily to the numpy dtype string representation. Also,
it might be possible to have numpy strings which don't specify a byte order?
I'm not sure, but this is cleaner code in any case.