Replace BDF data structures with classes in introduction client
The introduction client uses BdfDictionary and BdfList for its internal data structures, rather than just for serialisation. This tends to push type checking from compile time to run time. Create classes to represent the client's internal state.