refactoring bin script to support configurable config file path

This turned out to be quite a big re-write, but I believe it would be more maintainable. The port should reflect the original script - I am not familiar enough with the code to see what the expected script should do - currently, if you specify: 
* target
* provider
* weight
* mode
* show
* write

you end up hitting 4 different "actions":

* show_balance
* dump_weights
* show_balance | set_weight | show_balance | dump_weights
* show_balance | set_serve_mode | show_balance | dump_weights

**Note** : Choice is not very chatty when parsing errors are encountered - we could move the validate logic for weights into the validation_options function.