Merge develop branch.

This is a mayor refactoring and improvement of the current project.

It's stable so PR and NPM, we will continue the development in master