Refactor array_serializer for unserialized access

By breaking apart the mapping of objects into serializers and the
mapping of serializers into a hash we gain exposure to the interim array
of serializer objects. This is required to make array caching work
without re-implementing all of the serializer mapping logic.