Reduce memory consumption when digesting a huge file.

Current version of digest() method uses `slurp_raw()` to add content
to `Digest` object(sorry, it was my fault). If you tried to digest
with a huge file, then your memory will be used excessively as your
file size. This patch solve the problem by reading 4KB unit each time.
modify digest chunking to take optional chunk_size option