Fix attaching to blank and locked kinetis parts and other things

Improve handling of blank and locked Kineits parts, add 'with' support to board and improve handling of keyboard exceptions.

I removed reset from massErase so it no longer has the side effect of leaving reset asserted (Leaving reset asserted caused the init sequence to fail on locked kinetis parts before this patch).  It seemed to make more sense to let external code control the reset line completely, rather than having massErase set reset and then the code calling massErase clear reset.

It is more of a matter of preference though, and if you would like to have massErase assert the reset line, let me know and I can change it.  I can update the comments to indicate that it has the side effect of leaving reset asserted.

I haven't tested calling massErase on its own, but my intent was to use this function only inside target_kinetis.py since it is kinetis specific.  If other code needs to perform a mass erase then flash.eraseAll() can be used instead.