Polynomials

Biggest Introduction to the family:
DYNAMIC ARRAYS

All polynomials are now created by allocating memory and using a pointer to point to the allocated address.

All functions no longer return a polynomial but instead return void. This allows us to do two things.
1) We can actually have more than one resulting polynomial
2) We can return error messages using enum if wanted to for error handling.

Plans ahead:
1) Error handling so the user doesn't break the program with incorrect inputs. 
2) Code clean up
3) Re-name and merge some files (ie. poly_print.c would make more sense inside create_delete_poly but rename create_delete_ with a more appropriate name)
4) Enumerate all cases in ui.c to increase readability (ie. typedef enum {ADD, SUBTRACT, MULTIPLY.....} state; )