Rewrite of dependency extraction, particularly for npm. Paves way for easier addition of new package managers. Closes #1882