Fire an attach event if we're detached and receive data- apparently some OSes don't assert DTR when a program opens the port
add elapsed time and estimated time to progress command
PID Autotune: move processing to idle context so we can safely printf
StepperMotor: change minimum step frequency from 1Hz to 20Hz
Merge remote-tracking branch 'origin/fix/USBSerial-breaks-if-host-doesnt-assert-DTR' into edge
Add freespace GDB command to .gdbinit

This just reports how much space there is currently unused between the
top of the heap and the top of the stack.
Fixes issue #129 - Don't leak gcodes in block.

Previously Conveyor::new_block() was never executing the last chance
code it contained to clean up the next block that it was going to
overwrite and use in the ring buffer.  This was failing to run becaues
this->queue.get_ref(this->queue.size()) would always return a NULL
pointer as that method doesn't allow indexing to or past the tail.

I added a get_tail_ref() method to RingBuffer which returns the
required pointer.

NOTE: There is still a bug in the flush_blocks / Conveyor::on_idle()
      code path as it should have cleaned up this block already but it
      failed to do so.
PID Autotune: M304 aborts
Conveyor: Introduce wait_for_empty_queue
Endstops: Properly wait for queue to empty
added reset to console comamnd to actually reset the chip, dfu still goes into boot mode
untabify
Merge pull request #135 from wolfmanjm/feature/add-est-to-progress

add elapsed time and estimated time to progress command
add a pause of 5 seconds after issuing reset so the user can exit the console
Merge pull request #137 from wolfmanjm/feature/add-reset

Feature/add reset
Merge pull request #136 from bgamari/fix-homing

Endstops: Invoke ON_IDLE while waiting for queue
added '{' to fix the new Conveyor::wait_for_empty_queue() method