How to Train Your Neural Control Barrier Function: Learning Safety Filters for Complex Input-Constrained Systems