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 neede)
- Allow xpyb-style user packed data
Guard py3 logic with its own condition