refactor command argument parsing

As addressed in #22, the argument handling in prompt.c needs to be reworked. This change moves argument checking from ```execute()``` to the individual command functions, which allows for more helpful error messages and more precise argument checking (especially for commands which can take a variable number of arguments).
Additionally, the arguments array is now dynamically allocated to allow for any number of arguments.