More char packing

Pack ints when they are >= 256 (`bytes([i])` and `bytearray([i])` can't do it) and pack ints as 4 bytes in all cases. This assumes that if something is packed as `'c'` and is not a string, it is an int, which I'm not sure of, but is the case for things like atoms, and so is necessary for actions like doing `ChangeProperty` (which packs atoms (i.e. ints) to `'c'`) to set `WM_PROTOCOLS`.
Here it is without the special packing case, as opposed to before, which needed the special packing.