[FEATURE] handle shared_ptr directly

- handle functions that directly accept shared_ptr arguments
[FEATURE] handle special return types
[DOC] add some documentation