Wrapped iuse function pointers in iuse_function class.

This has two goals:
- Better abstraction of iuse's, making it easier to later add lua iuse's
- The ability to do some pre-/postprocessing on iuse's, including common cleanup tasks like applying used charges etc., for this iuse_function::call can be modified