Reworking part encoding and reading

Because the original script relies on a bit of the part header to work, preventing it from being stripped (#76), this is a different method to solving the `UnicodeDecodeError` in #75.

This method reads the file as bytes, checks the part encoding, then decodes the data into the proper string encoding. If any characters cannot be decoded, the character is replaced with a suitable substitute. 

This also backports the fixed encoding check from Next Gen (e7fe547b0d42873e47116fed179f983b3b75eadf).
 
**Todo**
- [ ] UCS-2 (UTF-16) Little Endian are not working. Import completely stops.