convert a blob to base64 string, with the data header included.
use blobToBase64Split to get a 2-tuple with the data header split from the data body
or use blobToBase64Body to get just the body of the data
this function works correctly all the time, unlike btoa, which fails for arbitrary bytes