SI-6370 changed ListMap apply method to produce correct error message

Current implementation of apply uses tail recursive apply0 to get a value from a key. apply0 relies on tail method to iterate over all keys.When the list gets to its end, tail produces an 'empty map' message in its exception, which is thrown by ListMap. This change catches this exception in the apply method and change the exception message to a more appropriate 'key not found' message

review by @phaller