Added isTraversable, isArrayAccess and keyIsset

I added three important assertions that are missing. See the code for details.
IMO both `isArrayAccess()` and `isTraversable()` are sufficient, because the point of those interfaces is exactly to use objects where you would otherwise use arrays. In other words, I can't think of any use case where you would test for the ArrayAccess interface *only* (and then you could still use isInstanceOf())