Make phantom types more readable to ensure correct use of types.

This commit introduces parameter-specific phantom types. It ensures
the use of the correct types by adding upper type bounds to the Builder.
It has two main benefits:
1. The compiler fails when using the wrong flag in a position where it
   does not belong.
2. It makes the implicit conversion functions easier to read and understand.
   Signature before:
     implicit def conversion(builder: JHSB[Checked,..., Checked]) = ...
   Signature now:
     implicit def conversion(builder: JHSB[WithHost,..., WithSystem]) = ...

   where JHSB = JsonHomeServiceBuilder.