I think I've got a solution for this. Let's default to always returning `ArrayCollection`, but introduce a new annotation, something like `@shard\unserialilzer\collection(unserializeTo="array|ArrayCollection")`. The Collection type serializer that you have already written could use this annotation to change the return type if explicitly set in the annotation. It means we would have to change the signature of the `serialize` and `unserialize` functions to pass the metadata also, eg `public function unserialize($value, $metadata)`, which is a notable BC break. Thoughts?

I can add the annotation if you like, or you can have a go if you want to delve deeper into shard. To add an annotation you'll need to do the following:
* Add an annotation class in here https://github.com/zoopcommerce/shard/tree/master/lib/Zoop/Shard/Annotation/Annotations/Unserializer
* Add a function to listen to the annotation event in here https://github.com/zoopcommerce/shard/blob/master/lib/Zoop/Shard/Serializer/AnnotationSubscriber.php