Add :serializer option to adapter

@airhorns

Allows a serializer other than `Marshal` to be used by the redis adapter.

A custom serializer can be configured by instantiating the adapter with a `:serializer` option:
```ruby
Adapter[:redis].new(client, :serializer => YAML)
```

Also, by passing a `:deserializer_exception` the `decode` method will fall back to using `Marshal.load` to deserialize data. This allows the deserialization code to maintain backwards compatibility with previously persisted objects.