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
Add apl_date header & source
apl_date: Add apl_freedate function
Add date sanity test
apl_date: Add various date API

minute
hour
phour (12, 1, ..., 11)
day
month
year
am
pm
test/date: Print out current date & time
Update README with data structure descriptions
apl_date: Add apl_read/writedatechunk functions

Dates aren't encrypted yet, but they may be in the future
apl_date: Data/time API accepts const struct ptr
apl_date: Fix apl_readdatechunk bug

Was reading the entire struct instead just the time_t value
apl_date: Don't write/read size of date data segment

We'll need this only when we start encrypting the dates
apl_gradebook: Store creation date as apl_date struct
Merge branch 'crypt'
Merge branch 'user-session'