[WIP] Refactor iuse methods and callers.

Definitely not safe to merge, needs testing and review.
This reworks iuse methods to return 0, 1, or > 1 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.