Changed from providing a Type for every decode call to use a generic cla...

So I saw in your documentation that you included Type type in the decode become you couldn't use a generic.  I wrapped the encode/decode in a generic class and makes it so you only have to setup per class you decode once.  Also I didn't include in this pull request but in this version the encode could be static.

Please consider this as a possibly cleaner syntax for using your very helpful package.