Lazy loading of d3

This PR lazy loads the d3 source file, meaning, it's only loaded when the user wants to display the profile.

This safes 50KB of data transferred on initial loading of app, particularly useful on mobile devices, where profile is never used anyway.

Drawback: first drawing of profile has to wait for the 50KB to be loaded first.