Restrict shouldn't be applied to a upcr_[p]shared_ptr_t.  Fixes #26.
FileManager is reference counted.  It needs to be allocated on the heap.
Make sure that the backend knows the correct size/alignment of upcr_shared_ptr_t so there's no confusion.  We used to use an empty struct, but this could cause a divide-by-zero warning when sizeof(shared T *) was used in contant expressions.  Fixes #34.
Enums can be forward declared.  Fixes #29.