apl_crypt: Add encrypt/decrypt directly to/from file

apl_encryptfilechunk
apl_decryptfilechunk

These methods are counterparts.
apl_entry: Use crypt filechunk methods

Same code, but only the apl_entry translation unit knows the storage
size for the struct (length of plaintext)
Add apl_session header & source

Sessions are started when the user first runs the program. They will
login with a username and password to begin or continue a session.
Sessions keep track of the active gradebook, last login time, and
other miscellaneous data. A user's gradebooks can only be accessed
and modified when they login to a session. When a session is ended
the active gradebook is "remembered" and automatically opened when
the session is resumed.
Add apl_user header & source

apl_user stores information about individual users. To begin a session,
a user must exist and the correct login information must be supplied.
If any is correct, a session is unable to be started.

New users can create their own user profile and begin using APL with
a fresh session. Sessions may modify user information, so the user
profile files are loaded and changed every session.
Add apl_file header & source

Declare and define some file-related utility functions.

apl_freadchunk
apl_fwritechunk

Chunks are sections of data which consist of a metadatum (the data
byte length) and the data itself. Gradebook entries are stored as
chunks since the struct sizes may differ, not to mention anything
about ciphertext length discrepancies.
apl_file: Remove comment from apl_freadchunk definition
apl_file: Add apl_isdir method
apl.h: Include math.h and link -lm
apl_entry: Add score/max API

setscorei
setscoref
setmaxi
setmaxf
getscorei
getmaxi
getscoref
getmaxf
Update README with data structure descriptions
Merge branch 'crypt'
Merge branch 'user-session'
Merge branch 'entry-api'
Merge branch 'date'