Fix #4307 - Check action for nil for post modules

Auxiliary modules already do this, but looks like we forgot to do the same for post modules.

I also changed the error to allow "reason" in order to be more informative about what the user should do.

Fix #4307

## Verification ##

This is for post modules:

- [ ] Generate a meterpreter (executable)
- [ ] Set up a Windows box
- [ ] Start msfconsole
- [ ] ```use exploit/multi/handler```
- [ ] ```run```
- [ ] Double click on your meterpreter payload to get a shell
- [ ] At the meterpreter prompt, do ```run post/windows/manage/webcam action=asdf``` (just make sure the action is something invalid)
- [ ] You should see: "Post failed: Msf::MissingActionError Invalid action: Please use: LIST, SNAPSHOT"
- [ ] This time, try: ```run post/windows/manage/webcam action=asdf```
- [ ] You should a list of the webcams the module found

This is for auxiliary modules:

- [ ] Start msfconsole
- [ ] ```use auxiliary/scanner/http/http_put```
- [ ] ```set rhosts [IP]``` (it doesn't really matter if you have a valid IP or not)
- [ ] ```set action INVALID```
- [ ] ```run```
- [ ] You should see: "Auxiliary failed: Msf::MissingActionError Invalid action: Please use: PUT, DELETE"