Give conditions a unique class

Issue #18 resolved
Richard Cotton repo owner created an issue

To allow handling of individual conditions by tryCatch, you need to give it a unique ID.

As advised by Luke Tierney and Duncan Murdoch, the ID of an error/warning/message is its class.

Probably need to have a way of autogenerating this class. Possible idea:

From inside assert_engine, we can do

predicate_name <- get_name_in_parent(predicate) # e.g., "is_in_range"
condition_type1 <- paste0(                      # e.g., "IsInRangeCondition"
  R.utils::toCamelCase(
    predicate_name,
    split = "_"
  ),
  "Condition"
) 
caller_package <- find(predicate_name)          # e.g., "package:assertive.numbers"
condition_type2 <- paste0(                      # e.g., "numbersCondition"
  substring(caller_package, 19), 
  "Condition"
)
c(condition_type1, condition_type2)

Ideally though the first condition type ought to be negated. For example, it should be an OutOfRangeCondition.

Also need the ability to manually push extra classes, for the cases where functions can throw several error types.