Fixup list.h and make small API changes to list.h

Remove assertions (will SEGFAULT if NULL is passed anyway) and
ty_list_remove will now init the removed head (instead of NULLing it).

And, ahem, fix the long-lasting and undetected inversion between append
and prepend (yeah yeah I know, unit-testing and all that).
Add ty_list_replace to list.h API
Add ty_list_append_list and ty_list_prepend_list to list.h
Don't keep the notification mutex in ty_device_monitor_refresh (win32)

The notification mutex was previously kept locked until all events
were processed, which may take time (due to callbacks). This could
keep the monitoring thread from processing WM_DEVICECHANGE which
MSDN says must be processed quickly.

Now, the notification list is moved to a local variable and the
mutex is released immediately. It is locked a second time after
processing the notifications to prepend any remaining event for
future processing (in case of an error).
Add userdata pointer to various objects

Keep an opaque pointer to userdata in ty_device, ty_device_monitor,
ty_board and ty_board_manager.
Strengthen the reference counting of ty_device and ty_board

Make sure neither ty_device nor ty_board are freed while their
monitor/manager still holds a reference to them.