Turn the keyboard class backing the km_kbp_keyboard and km_kbp_keyboard_attr objects into just keyboard_attributes.
Move the abstract_processor and sublcasses as the objects that back km_kbp_keyboard and make keyboard_attrs a member of the asbtract_processor.
Move kmx_processor and mock_processor declarations into their own headers.
Make all vector<km_kbp_option_item> into vector<option> to handle memory management, moving and copying correctly.
Update test cases accordingly
Additionally refactored option.hpp into option.hpp & option.cpp.
lookup now returns just the value since scope and key are fully
specified in the arguments, but updates and SAVE/RESET action items
still provide scope, key & value.
* Initialise cached option value with options_set's scope so correct
scope is returned.
* Use unordered_map::operator[] as emplace never overwrites.
* Ensure that km_kbp_options_set_to_json() returns the document size
including the null.
* correct scope_name_lut so scope names are in the right order.