make h_cast a family of macros, add H_ASSERT family, make h_assert_type a macro