simplify main flash program function, rare bugfix

- change behavior so alignment of buffer with page edges always
  takes place - every data sheet suggests that all data writes
  shoul align page buffers.
- fix so last flash page buffer is checked in buffer align process
  (previously the for loop ended one round too early)
- change so unassigned data is written to 0xFF instead of 0 because
  blank memory is 0xff (possible problem on validiation if data
  was already written in an unassigned location, writing to zero
  will set the flash contents to 0 whereas not writing - or writing
  0xff will not change the flash contents) - pages should be erased
  first before program anyway so this is probably not an issue
- remove all of the jump calls from main program so the algorithm
  is much easier to understand
- add a progress indicator to the main programming utility
- remove page empty check from atmel_flash, it should be in command