Implementing new serialization format

issue #52, in the flesh.

tcrypt now returns raw encryptions strings instead of base64 encoding
everything. base64 encoding is the responsibility of the one calling
tcrypt.

the format encodes the version, the description of the payload
(aes/twofish, CBC, padding, etc), the binary IV, and the payload itself.
it allows for variable length payload description, making it
forward-expandable. it is self-describing, so tcrypt will always be able
to decrypt any message in the new format, no matter what cipher or
padding mode etc is used, as long as the key is correct, and with no
extra metadata. just the payload itself.

this format is MUCH more compact, and allows for binary storage.

note that it's NOT implemented anywhere in the app.
tcrypt: adding back in old format serializer (not just deserializer anymore), and allowing to specy what serialization version to use when calling tcryp.encrypt (via options). version "0" is original Turtl format.
user model: get_auth now forced old-version serialization in tcrypt, meaning logins are no longer broken =]
converting Protected (and by proxy, ProtectedShared) to handle new serialization format in tcrypt, whilst being mindful of detecting old format. this is important because Protected is now responsible for base64 encoding. tcrypt no longer does this. working beautifully so far. all old data will be converted as its saved, all new data will just use the new format. old data format can be supported as long as needed (probably forever). its a handful of lines of code so might as well.
Merge branch 'serialization' into files