Addresses issue #1667
Choosing not to study still reads the book for one step
Update bionics.cpp

updated failure mechanics.  discussion here: http://smf.cataclysmdda.com/index.php?topic=2687.0
new bionics_install chance of success & skill calculation

discussion here: http://smf.cataclysmdda.com/index.php?topic=2687.0
use adjusted_skill to calculate failure_level
Added RPG-7. Need review & testing.
Added RPG-7 Ammo
Fix of issue #2657: NX-17 charge rifles now work (more) properly.
basic martial arts functionality.

* added martial arts as first-class objects instead of items, stored in
player::ma_styles
  - martial arts attach diseases to player representing buffs (see ma_buff),
    restricted by skills and current weapon-wielding status
  - can attach buffs on-hit or "statically" (on player::reset)
  - buffs can stack based on their max_stacks trait, and last for buff_duration
    turns
  - martial arts data stored in data/raw/martialarts.json, all
    buffs/conditions/etc are editable
* implemented karate in new JSON system
* added a "test_karate" style, will remove later
Merge branch 'master' into martial_arts
Fully functional martial arts framework v1

* techniques work
* technique restrictions work
* technique custom strings work
* added two "demo" styles, coward and berserker
* Martial Arts Training now gives all implemented styles (karate, aikido, demo
styles). Other martial arts traits won't do anything because they still give you the
old martial arts items which are no longer accessible.
Merge branch 'master' into martial_arts
small json bugfix
More martial arts changes

* added capoeira, judo, tai chi
* added "throw_immune", "block", "block_<stat>" as buff effects
* buffs can now depend on other buffs via "req_buffs"
added krav maga
Add a new Jsin class for reading JSON from a stream.
Add some new functions for loading arbitrary data from JSON.
Add a method to material_type to load a material from JSON.
Add "type" members to data/raw/materials.json.
Clean material.cpp includes, and use dout() not debugmsg().