Added a new function to release a hash table that is allocated using means other than Eiffel run-time memory functions.

git-svn-id: https://svn.eiffel.com/eiffelstudio/trunk@96430 8089f293-4706-0410-a29e-feb5c42a2edf
Changed an iterator to work on key-value pairs rather than just on values.
Allocated memory for key-value pairs to be able to call destructors on them when elements are removed from the map.
Used a dynamically allocated table instead of an instance allocated table to support copy constructors.
Implemented reference counting to support copy constructors.
Ensured destructors are called when the map is released and when an item is erased.


git-svn-id: https://svn.eiffel.com/eiffelstudio/trunk@96431 8089f293-4706-0410-a29e-feb5c42a2edf