add ability to manually specify an initialization vector

We have a need to be able to encrypt using a manually specified initialization vector. This pull request gives us that ability while also keeping the existing interface intact.

Note that hard-coding and reusing an initialization vector is NOT SECURE and thus should not be used if you want strong encryption.

Also note that I removed the srand call in #generate_initialization_vector. According to [the Random docs](http://www.ruby-doc.org/core-2.0/Random.html#method-c-srand) the default seed includes the time as well as a lot of other data. Using the time alone will use the same IV for two encryption calls done in the same second, which is undesirable for us.