support negative array indexes deeply in get keys

Currently in Map the behavior of the get method when negative array indexes are passed as keys differs if the negative array index is the last key or not:
Map.new(a: [b: :c]).get(:a, '-1', :b) == nil
Map.new(a: [b: :c]).get(:a, '-1').get(:b) == :c

This PR includes a change such that both cases now equal :c along with a test.
(0...collection.size).include?(key) or (0...collection.size).include?((-key)-1) is correct for identifying positive and negative indexes that are in bounds.  However an exception based implementation reads better.