Implemented missing case in merge operation (auto-merged features)

This commit also includes some refactoring/renaming to make merge steps and operations clearer and to allow being used in different contexts
Code cleaning has been perfomed and headers have been added to classes that were missing them
Added conflicts support in cherry-pick operation
Added support for rebase operation with conflicts

Also Added documentation for rebase operation and --squash option
Updated headers that were outdated in the merged code