Implemented the item slot for books:

Convert functions in player to use const itype references instead of non-const pointers.
Apply astyle to Item_factory::set_use_methods_from_json
Load use functions directly into a vector,

instead of loading it into an itype pointer (in the use_methods array of the itype that the pointer points to).
This allows the function to be used without an itype pointer, just with a vector of iuse_functions.

Also move the check for the existence of the requested member into the function itself to avoid writing the member name twice.

And use the json objects for error reporting instead of debugmsg.

And fix a possible bug: use the member parameter instead of the fixed string "use_action".
Give books their own use functions vector.

This allows items that are tools and books to have different use functions, one (directly inside the itype) for the tool part and one in the islot_book for the effects that happen after reading the book.
Because reading only triggers the effects in the book specific use function, the martial arts style book need to set up book data to specifically write those iuse functions.
Make the macguffin item a proper book item.

Use the books use_function to call the macguffin function.
Move the unread chapters number into an entry in item::item_vars.

Add some chapter functions to the item class. The number of unread chapters is stored with the id of the player character, so different player characters on the same world can read the same book independently.

Increases the savegame version to check for books with charges in old versions (new versions might have books with charges again if the charges are used for some other purpose, e.g. a book that is also a tool).
Rename islot_book::type to skill.

Extract the skill into a local variable when using it in the two read functions in player.cpp, so one does not need to repeat the islot_book pointer.
Check the skill for being null (which is quite likely), it won't cause a crash most of the time as player::skillLevel "allows" it. In fact player::skillLevel will just create a new skill level for the null-skill and return that.

It's far more obvious what is meant by someItem.type->book->skill instead of someItem.type->book->skill.
Make the remaining members of islot_book ints

No point in having them all be of different signedness and size. int is good enough for everyone.