Added support for StringIO as input and Marshal/Unmarshal 

Great work! It is just the library I was looking for.

I use Carrierwave + Fog (to upload to S3). So I read the exif data from the carrierwave uploader object. Also the marshalling allows me to save in a database the raw data and unmarshall it later without needing to re-read the file (is expensive to download 2 or 3MB again)