Refactor iuse methods and callers.

This reworks iuse methods to return the number of charges consumed to indicate if and how many charges are consumed instead of relying on both iuse and callers both handling charges properly.  The caller is now in charge of consuming charges.  vache pointed out that this should probably be the responsibility of the item object, someone can feel free to do that refactor afterwards, but this addresses the iuse/charge handling bugs.
Along the way did a lot of cleanup in iuse, and ended up wrapping the actual invocation in a helper method to make lua integration easier.