hal/*/dispatch_table.*: check for NULL field instead of disp_op_end

In this way, we avoid extra pointer access and unify the way we
check for our array bounds: always check for the NULL array element.
Also, the disp_op_end, which was used for marking the end of the array,
is not needed anymore and was, thus, removed.
hal/sm_io/sm_io.*: don't use array size on smio_init_exp_ops ()

This is not needed anymore, as the NULL field marks the end
of our arrays.
hal/{sm_io,msg}: use NULL as arrays terminators for exported functions
hal/sm_io/*/fmc130m_4ch/*_exp.c: fix repeated function pointer array element
hal/sm_io/*/fmc130m_4ch/_exp.c: fix wrong typecast on SI571 functions