code readability

Replacing device ID literal with the proper #define value
Adding new encoders

adding arlec encoder and facilitating the referencing of different types
of encoders by the common Encoder class type object.
Changed the code value for common protocol encoder to ull because the
actual value in the Ninja packet is ull. This can be changed back to ul
if required.
handling multiple encoders

selecting the correct encoder based on encoding value