[HAL][NRF51822] enable I/O mapping and peripheral dynamic assignment for I2C and SPI

+ to enable any digital I/O of nRF51822 to be used as I2C's SDA/SCL or SPI's MISO/MOSI/SCK.
+ to avoid conflict between I2C and SPI by dynamically assigning peripheral

    The nRF51822's I2C_0 and SPI_0 (I2C_1, SPI_1 and SPIS1) share the same address. They can't be used at the same time. So we use I2C_0 and SPI_1 as default. See nRF51822 address information at nRF51822_PS v2.0.pdf - Table 15 Peripheral instance reference.

See discussion at #573 
I believe that if you have 2 spi objects using same peripheral instance (for instance SPI0), one of those objects would be freed (disable that SPI0 peripheral) but another one would be still in scope, would call inquire method and start transfer, this would leave to a runtime error. Or at least I don't see this handled there properly. Therefore touching SPI peripheral registers should be removed at the moment. What do you think?

Can spi pointer be NC ?