W25Q80BV: Extract hardware-specific code into separate layer.
W25Q80BV: De-singleton the driver.
W25Q80BV: Make flash command details private.
W25Q80BV: Separate structures into algorithm and hardware access layers.

Also extract #define constants for W25Q80BV into driver structure. Driver could eventually extend to other devices.
W25Q80BV: Un-const data argument to program function.
W25Q80BV: Move SPI functions to top of file, since they're static and used later.
W25Q80BV: Consolidate API to perform entire transfers in one call.