// use this to more concisely define values with one or more fallbacks to use when they are null.
// If called with two args, the second one has to be non-null
// if called with three args, the third one has to be non-null
//
// in two-arg mode, if the first argument is not null, then it's returned and fallback is not used.
// if the first argument is null, then the second arg is returned
//
// in three-arg mode, the first value is never returned. If the first arg is not-null, then the second arg is returned (if it's not null). Otherwise the third arg is returned