Fix char packing

- Python 2 can't do `string.encode('latin1')` for bytes >= 128, so only encode Python 3 strings (which is all that is needed)
- Allow xpyb-style user packed data