Instead of performing a bitwise shift operation on every GPIO read/write. Do it at compile-time and use bit mask instead.
The pin number itself is not used anywhere.
The change saves 108 bytes of flash memory
Remove the constructor from GPIO_pin so that we can use brace
initialization at compile time.
Rewrite the contents of pins.h to construct GPIO_pin types directly by
the use of a simple preprocessor macro.
Makes the code type-check and easier to read/extend.