Serialize data in Queue instead of json_encoding it

The documentation does not specify/limit the kind of object that can be passed as data to `Queue::push` and the current queue workers are broken when any non-array as data (except for the `sync` worker).

This uses `serialize` instead of `json_encode` to prepare the data for the workers (and `unserialize` afterward), this allows to use simple objects as job data.