Cleanup the sFLASH driver

General cleanups to the sFLASH driver that fixes bugs in the existing driver if starting a write at an odd flash address and/or writing an odd number of bytes. There is also a modest improvement in code space utilization and slight speedup when writing > 4K bytes in a single write.

Test routines are available on mattande/core-firmware@4521ec1bd5bab6a5d1e236d84277c5004e83c5a2

 * Expose only sFLASH_WriteBuffer(), sFLASH_ReadBuffer, sFLASH_Init,
   sFLASH_EraseSector() and sFLASH_EraseBulk() as these are the only
   functions external users should be calling.
 * Add extern for binding in C++
 * Note that there is no restriction on using auto address increment
   when the address crosses multiple pages
 * Rewrite sFLASH_WriteBuffer() to correctly handle writing odd
   number of bytes and/or starting on an odd address