Use boost::bimap to map pins to tfwidgets

This replaces the previous, more error-prone implementation
that used two std::maps to go from pins to widgets and vice
versa