Adding the initial code for sw pin support

Software Pins are a simple addition that allows support a user callback
on pin mode/read/write. The idea is that existing libraries can
leveraged by coupling user code supporting this interface. Examples to
follow.
simplfied the interface to make it smaller and faster
changes to fully controlling sw pins outside of arduino core
back to internal state management

this makes things simpler and easier on the stack.
TODO: figure out interrupts.