Explicitly set tooltip's dimensions onLoad to its natural size

Also, update reposition() to use getBoundingClientRect() instead of
manually finding the dimensions
Keep the tooltip within the viewport
Add option for the tooltip to follow the cursor