Reworked cc_assert_X() functions underlying CC_ASSERT_X() macros.

Replaced cc_assert(), cc_assert_eq_int() and cc_assert_eq_str() functions
with cc_assert_unary() and cc_assert_binary() functions.

Added cc_arg struct value type for holding an assert argument, containing
both the argument's expression (as a string) and its value (as a cc_value
struct).  Added various CC_ARG_X() macros for building cc_arg structs
using compound literals.  Changed the cc_string_alloc_formatted_argument()
function into cc_arg_alloc_str().

Added cc_value struct value type for holding a pointer to the argument value
and a function for creating a string representation of the value.  Added
various CC_VALUE_X() macros for building cc_value structs using compound
literals.  Added various cc_value_X_alloc_str() functions for making
string representations of values.

Added cc_operator.h/.c containing typedefs for unary and binary operator
functions, and various operator functions supporting the current CC_ASSERT_X()
macros.

Added a NULL after the variable arg list in the CC_ARRAY_ALLOC() macro
in order to generate a compiler error when the argument list given to
the macro contains a trailing comma.