For the first question, I think both approaches should work. You only have to be careful about startNewChain() because the behaviour can be somewhat unexpected. What it does is specify, that a new chain should be started with the operator on which you call startNewChain(). For example, in:
DataStream input = ...
You will have one chain ("map1") and a second chain ("map2", "map3").
For the second question, I think to make sure that each operator is on a separate machine you would have to set the number of slots to 1. This way you get 3 slots and if you set the resource group or chaining right you will have each operator on a different slot.