Cleaned up plugin UI construction

I condensed the slider creation into a utility function, since the stage
sliders were all more or less the same; this also dodges some NPEs if MM
starts with an invalid setup (i.e. trying to get the stage's current
position when there was no stage). This also replaces the IntegerField
with a good old-fashioned JSpinner (after the previous commit,
IntegerField was only being used for the Z settle time control).

Signed-off-by: Luke Stuyvenberg <stuyvenberg@wisc.edu>
SteppedSlider enhancements and fixes

trySetValue no longer goes through with it if the value is the same. This
needs to happen in some places, but trySetValue -- used by the timer motor
updates in SPIMAcquisition -- isn't one of them, and it was interfering
with the ability to enter and go to values.

I got rid of the horizontal struts in the value/range box at the bottom of
the slider; for some reason, these were increasing the box height
significantly. If they look too awful, I'll put in a 4x1 fixed box...

The initial value of a DoubleField is now rounded as well. A minor fix,
but it annoyed me.

I added functions for getting the current minimum and maximum of the
slider. Still no way to set the rounding. :(

Signed-off-by: Luke Stuyvenberg <stuyvenberg@wisc.edu>
Moved step size to DAL

The Picard stage step sizes are now properties of the devices. They're
editable while the system is running, though such editing would likely
lead to bizarre effects.

Signed-off-by: Luke Stuyvenberg <stuyvenberg@wisc.edu>
Changed slices to use um

Almost forgot about these! Technically they were using um anyway, but now
they multiply their numbers by the Z step size (provided it's available on
start-up -- this might need fixing!) so you don't go to any
non-integer-multiple positions.

Signed-off-by: Luke Stuyvenberg <stuyvenberg@wisc.edu>