Add parsePacketArgs(), structs to server.

Add:
	src/chat_server.h
		-add structs:
			-Command_t, for packet payload
			-Channel_t, for channel (chat-room)
			-User_t, for users within a channel

	src/chat_server.c
		-add parsePacketArgs() function, which intakes a packet payload string,
		parses it on the space character, and returns a formatted Command_t
		struct.
Add client_utils; mov command handler to socket_io

Add:
	.gitignore
		-add server.log, which will be written to for testing

	src/client_utils.(c, h)
		-file to contain black-boxed communication functions (ie, currently has
		sendMessage(), which internally preprocessed a string and then calls
		sendPacket()).

	src/(chat_server, socket_io).c
		-move parsePacketArgs() and the Command_t struct to socket_io, because,
		with the exception of a potentially superfluous IP address prepending
		every packet sent to the client by the server, packet command format is
		universal across the chat client.

	src/chat_server.c
		-add handlePacketArgs(), which intakes a Command_t and acts
		appropriately
Fix lost packet issue; add some documentation.

Add:
	src/((chat_server, client_utils, socket_io).c, constants.h)
		-add brief docstrings to each function

Fix:
	src/socket_io.c
		-after one packet was sent, subsequent packets would be "lost in
		transmission" -- they'd never reach the server.
		-fix by opening receiving socket at the beginning of sendPacket(),
		and closing at the end.
Add server_utils.(c, h), pragma to socket_io.h.

Add:
	src/server_utils.(c, h)
		-file (similar in purpose to client_utils), to contain miscellaneous
		functions utilized by {path}/chat_server.c
		-contains handlePacketArgs(), and an untested createChannel()

	src/socket_io.h
		-add '#pragma once', to prevent multiple inclusions

	makefile
		-update bin/chat_server dependencies to include server_utils
Add functions to add/manipulate channels.

Add:
	src/chat_server.c
		-add functions to add channels, find channels, add users to channels.
		-most are untested, with the exception of getChannels()

	src/chat_client.c
		-add getChannels(), which sends a get_channel packet to the server.

	src/socket_io.c
		-add macro for "get_channels" packet command.
Add to getChannels(); test addUserToChannel().

Add:
	addUserToChannel()
		-ensured functionality.

	getChannels()
		-list of usernames now appended to every channel's metadata string
		(after its name).
First step in sockets overhaul.

Mod:
	src/sockets_io.c
		-socket_io sees the most extensive changes
		-effectively replace current sockets functions with those provided in
		the sample sockets program
		-communication between client and server will henceforth rely on a
		quasi-polling mechanism (ie, the server writes to the client immediately
		after reading a packet, and the client reads from its socket immediately
		after writing to the server)
		-introduce padPacket() function, which prepends a packet payload with
		the sender's IP address

	src/(chat_server, constants).h
		-move MAX_PACKET_INPUT_LEN to MAX_PACKET_LEN macro, from the former file
		to the latter; the packet length is applicable to both the client and
		server executables.
Add response packets, and respective macros.

Add:
	src/chat_server.c
		-upon reading a packet, startServer() loop writes the response from
		handlePacketArgs() to the client.

	src/server_utils.c
		-handlePacketArgs() now returns output strings depending on the client's
		arguments, which either acknowledge receipt or return the information
		said client queried.

	src/socket_io.h
		-add ACKNOWLEDGE and UNDEFINED macros for handlePacketArgs().
Fix socket_io memory-alloc bug.

Fix:
	src/socket_io.c
		-sendPacket() never deallocated `char * received_buffer`, which was
		malloc'd to a 1000 bytes; after some seventy calls, bin/chat_client
		would crash due to an inability to further malloc memory.
		-attempting to free() the pointer threw a double-free error
		-solve by declaring `char received_buffer[1000]`
Add joinChannel() to client; def join macro.

Add:
	src/client_utils.c
		-add joinChannel(char * name), which places a user in the channel with
		.name equaling name.

	src/socket_io.h
		-add macro for JOIN_CHANNEL packet command.
Add command equality substitution macro.

Add:
	src/server_utils.(c, h)
		-handlePacketArgs(), in comparing the .command of an input Command_t,
		reiterated a structurally similar strcmp() call across several
		conditionals.
		-create COMMAND(commandMacro) macro to abstract the `strcmp() == 0`,
		which cut down the verbosity of each boolean check.
Debug addMessageToChannel() and getMessages().

Add:
	src/server_utils.c
		-debug addMessageToChannel() and getMessages(); fully functional, except
		the latter doesn't return the full length of the username of a submitted
		message (via packet; a message added directly by addMessageToChannel()
		returns the entire username).

	src/client_utils.c
		-add function to getMessages() from server

Mod:
	src/constants.h
		-increase MAX_PACKET_LEN from 1000 to 2000 bytes, for insurance.
Add client-side message-string parsing.

Add:
	src/(server_utils, socket_io).h
		-move Message_t struct from server_utils.h to socket_io.h, because it's
		used client-side as well in creating a buffer of received messages

	src/client_utils.c
		-add extensive parsing to getMessages()
		-an incoming string of new messages is split into individual messages,
		which are then split into their components (time, username, body)
		-components are stored in a Messages_t struct, which is added to the
		client's messageQueue
Add graphics functionality.

Add:
	src/client_graphics.(c, h)
		-file containing functions for rendering the chat-client
		-moveCursor() and clearScreen() are abstractions of commonly used
		lib/xterm/xterm_control.c functions
		-printMessages() prints messages, with each component highlighted a
		different color.

	lib/xterm/
		-lib for simple xterm manipulation

	makefile
		-add lib/xterm/xterm_control.c to bin/chat_client compilation
Add debug statements; memory bug persists.

Add:
	src/*
		-add statements that write variables to server.log and console.log files
		-a memory bug causes messages in the server's messageQueue to overwrite
		one another
Fix client sendPacket memory bug.

Fix:
	src/client_utils.c
		-sendPacket() was reading MAX_PACKET_LEN bytes into a MAX_PACKET_LEN
		buffer and appending a null byte; valgrind identified the problem,
		though it hasn't thrown an error until now because no packets of
		MAX_PACKET_LEN have been read.
Fix getMessages() memory bug.

Fix:
	src/client_utils.c
		-a malloc'c char pointer was never freed
Fix changing time bug.

Fix:
	src/server_utils.c
		-getMessages() prepended every stringified, outgoing message with
		a sprintf'd time(NULL), instead of that Message_t's time_t
		-hence, the time displayed client-side was always the current time,
		not the time at which the message was actually sent
Functional client-to-client communication.

Add:
	src/server_utils.c
		-fix main memory leak by mallocing each message's string components
		(username, message).
Merge branch 'client_to_client'