More refactoring

it's going to be great...
`spacing` used to be an integer, which meant that the scale couldn't be accurately represented in anything but a few sizes because spacing would always get rounded off. Making it a CGFloat may mean that we won't have pixel-aligned dashes, but the overall size and scale will always be correct.