Make API type-safer

Changes:
 - Restrict type of keys (including hash's) to `String`
 - Parameterize type of values
 - Rename `Format` to `Write`, `Parse` to `Read` combined into `Format`
 - Pull out `Parse.Implicits` as top-level trait/object `DefaultFormats`
 - Bitwise commands gets/returns `Boolean` as value
 - HKEYS returns only strings 
 - Change argument order of SET as documented
 - Rename `RawReplyReader` to `RawReplyParser`

TODO:
 - [x] Support various argument types for lua scripting (b229d12)