Merge logic is now separated into its own abstraction. Plugin support
has been improved. Rafactoring is resulted in few errors that would not
be resolved until the refactoring is complete.