Add unique id to failure objects
Failure methods now use ids rather than indexes

This is to address @tarcieri's "Failures don't have unique IDs" point from the
Failures 2.0 wiki.