Add CI_User_agent::parse() to allow parsing a custom user-agent string

Based on PR #970