Minor tweaks to improve MD5 / SHA1 performance

Create the hex string in a much more efficient way.  Also add SHA256.

As a possible feature addition, you might want to think about adding something like:

```objective-c
- (NSString *)MD5String;
- (NSData *)MD5Data;
```

The `MD5String` method is just `MD5Sum` renamed.  `MD5Data` returns a `NSData` object created with something like `[NSData dataWithBytes:digest length:CC...]`.  Occasionally you want the hash in raw bytes, and with just a hex string, you have to add a bunch of extra steps to convert it back to raw bytes.  And I'm clearly handwaving the public API changes that this implies.  :)