Learning materials public api

what this does:

- it adds a pseudo-key column ("token") to the `learning_material` table
- it backfills all existing learning material records with a randomly generated and unique pseudo-key
- it allows for the d/l of learning materials file assets by said pseudo key via the api (`/ilios.php/api/dl/<token>` and `/ilios.php/api/lm/dl/<token>`). access to learning materials via the api _only_ requires the pseudo key, not a authenticated user session or other forms of credentials.
- it modifies the learning material upload process to generate and save new records with a pseudo-key  
- it alters the calendar feed output to link to learning materials downloads via the API

what this doesn't do:
- no UI for removing/regenerating pseudo keys from LMs
- no UI for actually showing the pseudo key or API d/l URLs

refs #380