Attempt to speed things up by removing almost all bbox() calls
Alter how line-wrapping calculates line length

* Previously, the script would calculate line length by
   - Create element
   - Populate with word 1, measure element, check against required width
   - Populate with words 1 & 2, measure element, check against required width
   - Populate with words 1 thru' 3, measure element, check against required width
   - Populate with words 1 thru' 4, measure element, check against required width
   - And so on...
* This required many, many calls to re-render onscreen content, which took time.

* The new method measures widths of individual characters instead - and then stores the result in case it encounters the same character again
* This means that the main bulk of line length calculation comprises of numerical addition, rather than multiple successive SVG element draws
* It's far from perfect, but it is considerably faster
Reduce number of gradient definitions

* Previously, a gradient was created for each box, resulting in 50+ identical gradients
* Now, one gradient is created and is used by reference in all boxes
Hide techtree until rendered

* The page now loads with the SVG canvas having a CSS 'display' value of 'none'
* Then, once the techtree is rendered, it is set to 'block'
* Curiously enough, this speeds up rendering time (just)