add new method `Key()` to the concept of a `Handler`

for more details see: https://github.com/miloyip/rapidjson/issues/132
Why do you duplicate the error handling? (Untested):
````cpp
typename TargetEncoding::Ch* str = stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_);
bool handleStringOrKey = isString ? handler.String(str, stackStream.length_ - 1, true) : handler.Key(str, stackStream.length_ - 1, true);
if (!handleStringOrKey)
    RAPIDJSON_PARSE_ERROR(kParseErrorTermination, s.Tell());
````