Add optional encoding to Touch()
Introduce Blob.ContentAsText()
Support BOM detection in Blob.GetContentAsText()

Fixes #475