phase-list: expose zipmerge via a public API

Expose the implementation of phase zip-merge algorithm via a public API.

A part of https://github.com/strongloop/loopback/issues/895

/to @raymondfeng please review
/cc @ritch 
The first array is the list of built-in phases provided by loopback core. The second array is the list of phases from `middleware.json`. How do you propose to handle the situation when the user does not list all built-in phases in his `middleware.json` (the case of `zipMerge(['start', 'end'], ['first', 'end', 'last'])`)? This will typically happen when we add a new built-in phase in loopback and user has a version of `middleware.json` scaffolded before that change was released.