[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 
Thats a good point. The LPC812 serial code also doesn't handle that properly. On the other hand multiple serial objects on one interface is less likely than SPI/I2C. In that case I think two counters would need to be used, one for each peripheral, which are increased upon creation and decreased upon destruction. When they are zero the peripheral is free.

That said, destruction of I2C/SPI objects is a pretty rare circumstance anyway. I think without the destruction implemented it already meets 99.9% of the use cases, at least a lot better than fixed pins.