Decoding refinements

Improved error handling during decoding, if a float slipped through to
be decoded then a fatal error was caused now caught and handled.
String values not requiring any decoding were previously passed back un
effected whilst the decoded values were passed back as numerical types,
now all values are passed back as numerical values.