fix object unlink error handling

Fix the object unlink error handling so that each function cleans up
after itself properly.

Also use find_symbol() instead of __symbol_get() to make cleanup easier.
When patching a module we don't need a reference to each symbol, since
we already have done a try_module_get() on the module.

Fixes #392.
Haha nice.  I think it might be more self-documenting to take the module_mutex in this case.  Then one could see "I'm taking a lock to protect the list I'm searching" rather than disabling preemption as a VERY coarse grained locking mechanism.  Plus there is less overehead with taking the mutex.  I think the preempt_disable() option is for code paths that already require preemption to be disabled.