Syncing iCloud Calendar and Google Calendar
You can sync your iCloud calendar to Google Calendar using https://icaltogcal.com. However, there are some limitations, most importantly:
This is a one way sync, meaning that it goes from iCloud to Google Calendar, but not the other way around.
Google Calendar only updates these 'subscribed' calendars 'even few hours' so you can't have them always instantly up to date everywhere.
n.b. I wrote a bit more about this here but this covers the highlights.
I am not aware of any services which allow you to do true two-way sync between iCloud and Google Calendar.
But before you do that, unless there is a specific reason that you have to use iCloud for calendars, you could very easily: export your iCloud calendars to .ics files {and then stop using iCloud… in fact, I would delete them from iCloud once you have the ics files backed up so you don't forget and start to put stuff in the wrong place}, import the .ics files to Google Calendar, and then access Google Calendar from your Macs, iOS devices, and Windows 7.
That seems like a much easier and better option than trying to sync calendars between iCloud and Google Calendar, which, quite frankly, isn't likely to happen.
Syncing iCloud Contacts and Google Contacts
It is possible to sync iCloud and Google Contacts. There are apps to do this available for the iPhone and Mac. However, to do this automatically requires that you have a Mac which is always on and connected to the Internet and to iCloud. (Perhaps your iMac would work?)
Once you have that, you can install Contacts Sync for Google Gmail (US$4) which will let you sync your contacts, and will keep them in sync for you.
Note that this is two-way sync between iCloud and Google Contacts, meaning that you can make changes anywhere and have them reflected in both services.
Disclaimer: while I do own this app, I haven't used it myself recently, so I can't vouch for it personally, but it seems to be well-supported and well-regarded. Make backups of your iCloud and Google Contacts before you use it, and I would recommend frequent checks to make sure that you are not getting a lot of duplicates, etc.
If you are going to do this, I recommend:
1) Download all of your Google Contacts to your iMac from Google.com
2) Download all of your iCloud Contacts to iMac from iCloud.com
3) Make backups of those contact files from iCloud and Google (email them to someone, put them on Dropbox, copy them to a USB drive, whatever… just make sure you have more than one copy).
4) Once you are sure that you have good backups of the contact files from Google and iCloud, delete all of your contacts from iCloud and from Google. Then sync all of your devices so that all of your devices have ZERO contacts on them.
5) Turn off iCloud syncing of contacts on your iMac (after it’s empty).
6) Merge your Google Contacts and your iCloud Contacts on your iMac.
7) Make a backup of your contacts (post-merge, pre-de-duplicating)
8) Run Contacts Cleaner ($5) which will alert you to duplicates and also to problems that you might face when syncing to Google*. I suggest running this weekly at first, and then at least monthly once you get it running and are confident with it.
(* = for example: Google Contacts only has one "name" field, and iCloud has a "First Name" and a "Last Name" field. Normally that works OK until you run into contacts with three (or more) names. In my experience, that almost never works well, even when iCloud is just syncing to iCloud, so I tend to put a "~" between two of the names. For example, if I had a contact "Jo Beth Williams" I would list her as "Jo~Beth Williams." You can use whatever punctuation that you like, but I like ~ because it’s unusual enough that if someone asks about it I can say "Sorry, I have to do that because computers are dumb, otherwise I end up with your name in my contacts as something like Jo Beth Beth Williams." I assume people with such names are used to this happening for most of their lives.)
9) Keep running Contacts Cleaner until it doesn't find any more problems.
10) Back a backup of your contacts (post-merge, post-de-duplicating).
11) Run Contacts Sync for Google Gmail and make sure it is syncing OK.
12) Once Google sync is running OK, turn iCloud syncing back on
But before you do that,, unless there is a specific reason that you have to use iCloud for contacts, there's an easier way: just use Google Contacts and don't use iCloud contacts. You can set this up on your Mac and iOS devices very easily now, as Google themselves describes here. If you decide to do that, I would recommend steps 1-10 as described above, but then:
11) Select all of your contacts (in the Contacts.app on Mac OS X) and export them to a vCard.
12) Upload those contacts to Google Contacts.
13) Delete them from your iMac's Contacts app.
14) Follow Google's instructions for setting this up on your Mac (essentially: go to Contacts.app » Preferences » Accounts and add your Google Account). Then do the same thing for your iOS devices.
The Moral of the Story is this...
If you insist on using iCloud and Google, you're entering a world of pain. Maybe not today, maybe not tomorrow, but soon.
iCloud isn't likely to work on Android or Windows [desktop or mobile] any time soon. Google's contacts and calendar work on Android, Windows, iOS, and Mac today. So rather than try to patch together some solution to sync two different systems together, you'd be much better off to just use one everywhere, and the one that you can use everywhere today is Google.
If you're not convinced by me, perhaps Lex Friedman's recent Macworld article will convince you: Can't trust this: Inconsistencies shake faith in Apple