Support custom encodings

Create a setEncoding public function that allows encoding to be set at
JavaScript level. Also build PrintJobElements to save the encoding and a
getter to return the encoding if attempting to convert the
ByteArrayBuilder back into a string;