Array access

As discussed, converted accessors to ArrayAccess.

I also moved some final properties into the container for consistency. Only one left is the hooks property.